java 学习 第五天 继承

扩展一个类也称做继承或者自泪花,在java中,默认所有的类都是课扩展的,但是可以利用final关键字阻止类被子类化。
从一个子类中可以访问到其超类的public和protected方法和域,但不能访问到其超类的private方法。
扩展java.lang.Object类时,是隐性扩展,可以没有关键字extends。
package app06;
public class box{
    public int lenth;
    public int height;
    public int width;
    public Box(int length ,int height ,int width){
        this.length =length;
        this.height = height;
        thos.width = width;
        }
    public String to String(){
        return "I am a Box";
        }
    public Object clone(){
        reurn new Box(1,1,1);
        }
    }
Box类扩展了java.lang.Object类。这是一种隐式扩展,以内没有使用关键字extends。Box覆盖了public toString 方法和 protected clone方法。将超类中定义的方法从protected改为public,提升可见性(但不循序降低可见性)
调用超类的构造器
子类和普通的类一样,可以利用关键字new来创建它的实例。
当通过调用子类的某个构造器来将他实例化时,构造器的第一动作就是调用直接父类的无参构造器。在父类中,构造器也调用其直接父类的构造器,这个过程会不断重复,知道到达java.lang.Object类的构造器为止。也就是说,党创建一个子类时,它所有的父类也就实例化了。
package test;
class Base{
        public Base(){
            System.out.println("Base");
        }
        public Base(String s){
            System.out.println("Base."+s);
        }
}
 class Sub extends Base {
    public Sub(String s){
        System.out.println(s);
    }
    public static void main(String[] args){
        Sub sub = new Sub("start");
    }

}

结果为:
Base
start
care:但是当在Sub类前加上public则会出现“The public type Sub must be defined in its own file”的错误.
当代码改成:

package test;
class Base{
        public Base(){
            System.out.println("Base");
        }
        public Base(String s){
            System.out.println("Base."+s);
        }
}
 class Sub extends Base {
    public Sub(String s){
        super(s);
        System.out.println(s);
    }
    public static void main(String[] args){
        Sub sub = new Sub("start");
    }

}

则输出为:
Base.start
start
Sub类的构造器的第一个动作就是调用Base类的无参构造器。java编译器已经穷桥的将sub的构造器改成了下面的样子:
public Sub(String s){
super();
System.out.println(s);
}
关键字super表示当前对象的直接超类的一个势力,由于super树丛Sub的一个实例中调用的,因此super表示直接超类Base的一个实例
通过使用关键字super,可以从子类的构造器显示父类的构造器,但是super必须是构造器的第一天语句。如果你想调用超类的另一个构造器的话,可以使用关键字super,例如:

 class Sub extends Base {
    public Sub(String s){
        super(s);
        System.out.println(s);
    }

这时结果为:
Base.start
start

你可能感兴趣的:(java)