继承
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方法,成员变量,普通块,构造器,方法),依次的这样直到导出类按照这个顺序初始化。