ThinkingInJava第七章复用类

继承

class Tiger extends Animal{

}

继承会继承基类的所有public方法或者属性,如果在同一个包下还会继承包属性和方法,不同包的protected也可以像public一样被继承

public class Animal {
    int a;
    public int b;
    protected void say() {
        System.out.println("i'm the animal");
    }
}
public class Tiger extends Animal {
    public static void main(String[] args) {
        Tiger t=new Tiger();
        System.out.println(t.b);
        t.say();
    }
}

输出:0 i'm the animal

导出类的初始化:Java会在导出类中super,默认会先初始化基类,因为导出类有可能会使用到基类的成员变量,所以基类必须先初始化

public class Animal {
     public Animal(){
        System.out.println("i'm the animal");
    }
}
public class Checken extends Animal {

    Checken() {
        System.out.println("i'm the checken");
    }
    public static void main(String[] args) {
        Checken c = new Checken();
    }
}

输出:i'm the animal    i'm the checken

当基类是有参构造器时:

public class Animal {
    int a;
     public Animal(int a){
         this.a=a;
        System.out.println(a);
    }
}
public class Lion extends Animal {
        int a;
        Lion(int a){
            super(a);
        }
    public static void main(String[] args) {
        Lion l = new Lion(5);
    }

输出 5;

扫描二维码关注公众号,回复: 2853892 查看本文章

当然垃圾回收器清理工作和初始化工作的顺序是相反的

基类的方法,导出类也可以重载并且使用

向上转型:继承是多态的条件之一

final 最终的,最后的:

1 我们可以用来声明常量public final float PI=3.14;

2 static int counter=i++;

   final int id=counter; 根据对象不同而保持不变性;

3 final参数:void with(final G g) 不能改变方法中的参数对象的引用  g=new G(“ss”);

4 final方法:final void fun(){}说明该方法不能被重载,但是可以被继承

5final类:不能被继承的类

完整的包含继承在内的初始化过程:加载找到最后的基类,初始化基类的(static变量,静态块,staitc方法,成员变量,普通块,构造器,方法),依次的这样直到导出类按照这个顺序初始化。

猜你喜欢

转载自www.cnblogs.com/dajingyu/p/9500589.html