1. 子类能够继承到父类的所有成员变量和方法,但不能继承到父类的构造方法(构造方法为对象的初始化工作,构造方法函数拿过了也很麻烦,子类有自己的属性,构造方法还是必要的时候自己写或是默认的+getter setter方法),在子类中可以通过super(参数列表)调用父类的构造方法。
2. 想要实例化子类,先要实例化父类,必须调用父类的某个构造方法。父类中有有参数的构造方法,子类中必须写一个有参构造方法,参数列表和父类构造方法相同。因为子类继承过来的属性初始化要通过父类的构造方法,因为属性一般都是private的需要通过父类public的构造方法访问。
3. 如果子类的构造方法中没有显示的调用父类的构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的对象时,系统默认调用父类的无参构造方法。
4. java中只能单继承。
5. 多层继承,C继承了B,B继承了A,C间接继承A。
6. 定义为final的类,不能被继承,final的方法不能被重写,final的属性只能被赋值一次,全局常量 public static final int a = 1;定义时就要赋值
7. 继承简化了代码的开发。
package weiguoyuan.chainunicom.cn; class Person { private String name ="jianghongweiSB"; private int age; public void f1(){ System.out.println(name); } public Person(String name) { this.name = name; } public Person(String name,int age) { this.name = name; this.age = age; } } class Student extends Person { private String sex; public Student(String name) { //this.name = name; 编译时报错,子类中没有该成员 //super.name = name;编译时报错,name属性在父类中,而且是private的,类外不可访问 super(name);//父类构造方法不可以继承,但公有的可以访问 // TODO Auto-generated constructor stub } } public class TestExtends { public static void main(String[] args) { Student s = new Student("weiguoyuan"); s.f1(); } }
package weiguoyuan.chainunicom.cn; class A { private String name = "A"; public void call(){ System.out.println(name); } } class B extends A { private String name = "B"; } public class TestExtends1 { public static void main(String[] args) { B b = new B(); b.call();//call的输出为A } }
上面代码输出为A
System.out.println(name); 输出为就近原则
在实例化b的时候先实例化父类A的对象,并将A的对象的地址存在B类对象中,可以通过 super来访问父类对象内容。