继承

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来访问父类对象内容。

原文地址:https://www.cnblogs.com/weixiaole/p/4543577.html