本来想继承、多态、和封装写在一起的,最后想想还是把多态独立出来更详细的讨论一下吧(写在下一篇blog里)
一、封装
1.封装概念:
将方法和属性封装到同一个类中
二、继承
1.继承概念:
Java是单继承,也就是意味着一个子类(基类)只能一个父类.用extends关键字实现
子类对象被创建时会先调用父类的构造方法,生成父类对象,然后再调用子类的构造方法,生成子类对象;
即:现有父再有子
另外:类和接口都能继承多个接口(特殊的抽象类),后面blog写
2.继承的特点(父类与子类的关系):
2.1 父类有的子类有
2.2 父类没有的,子类也可以有
2.3 父类有的,我还可以改
3.继承注意点
3.1 子类的构造方法隐式调用父类的无参构造方法:
3.1.1 需要指定调用父类的有参构造方法可以用Supper();//需要放在第一行(参照this()用法)
3.2 子类可以继承父类的方法和属性
3.3 子类不能继承父类的构造方法
4.定义一个类时若没有显式声明一个父类,那么系统会默认将父类指向object类
小彩蛋:
方法的重写(override)不是重载啊:
满足条件是:
1.1重写在子类和父类中
1.2类型、方法名、参数都需要相同
ps:若想要调用父类中被重写的类:
在子类中super().XXX就可以了(注意:这个可以不必要放在第一行)
贴上练习代码君:
package com.jacob.javase;
/*
* 继承和封装
*/
public class InheritAndPackaging extends Parent {
public InheritAndPackaging() {
// 调用父类构造函数,并创建父类对象
super(3);
// super.test();
System.out.println("child");
}
// super.test();需要存放在方法体中
// 重载的父类的方法(跨类重载)
public void test(int a) {
System.out.println("overLoad Parent!");
}
// 重写父类方法:要求:子类的访问修饰范围必须大于父类的访问修饰范围
public void test() {
// super();需要声明在构造函数中
super.test();
System.out.println("override Parent!");
}
public static void main(String[] args) {
InheritAndPackaging inhert1 = new InheritAndPackaging();
inhert1.initial=1;
System.out.println("此时父类中的初始值"+inhert1.initial);
InheritAndPackaging inhert2 = new InheritAndPackaging();
System.out.println("此时父类中的初始值"+inhert2.initial);
// super.test();不能使用在静态文本中
// inhert.test();
// inhert.test(5);
}
}
// static不能修饰类:只能用public, abstract & final
class Parent {
int initial=0;
// 构造函数只能用:protected、public、private修饰
public Parent(int i) {
System.out.println("has the ags parent");
}
public Parent() {
System.out.println("no args parent");
}
public void test() {
System.out.println("this is will be overrided of testParent");
}
}