java继承extend后子父类属性方法特点解析

extend

代码示例:

class Book {
    String name;
    double price;
    String author;

    Book(String name, double price, String author) {
        this.name = name;
        this.price = price;
        this.author = author;
    }

    // 默认的构造方法,当子类不继承父类的构造方法时,父类需要有这样的构造方法
    Book(){}

    void show() {
        System.out.println("书名:" + this.name);
        System.out.println("定价:" + price);
        System.out.println("作者:" + author);

    }

    public static void main(String args[]) {
        Combook book1 = new Combook("简爱", 20, "aobote", true);
        book1.show();
        System.out.println(book1.name);
        System.out.println(book1 instanceof Book);
        System.out.println(book1 instanceof Combook);
        Book book = (Book) book1;
        System.out.println(book.name);
        Combook combook = (Combook) book;
        System.out.println(combook.name);
    }
}

class Combook extends Book {
    boolean hasDisp = true;
    // 子类重写父类的属性
    String name = "koala";

    Combook(String name, double price, String author, boolean hasDisp) {
        super(name, price, author);
        this.hasDisp = hasDisp;
    }

    @Override
    void show() {
        super.show();
        System.out.println("是否有光盘?" + hasDisp);
        System.out.println("1" + name);
        System.out.println("2" + this.name);
        System.out.println("3" + super.name);
    }
}

输出结果:

书名:简爱
定价:20.0
作者:aobote
是否有光盘?true
1koala
2koala
3简爱
koala
true
true
简爱
koala

Process finished with exit code 0

可见:
1 子类可以继承父类的属性和方法,子类也可以重写父类的属性和方法,实现子类的特殊性;

2 通过super(父类构造方法参数集),可直接继承父类的构造方法,但不同于将父类的构造方法挪到子类,因为super()不会改变子类的属性值。

3 super关键字用于调用父类对象的属性和方法,this关键字用于调用子类当前对象的属性和方法。当子类重新定义了父类的属性时,如name,且子类构造方法继承父类的构造方法,则重写的属性遵从父类构造方法对该属性的处理,new一个子类对象时,该对象的属性继承父类的属性值,若需使用子类的属性值,则需在子类的构造方法内进行处理。

4 子类和父类对象可以互相强制转型,当子类转为父类,将丢失子类对象的特殊性,同样的当父类对象转为子类对象,属性值会变为子类重写的属性值,具有子类的特殊性。

5 子类必须要继承父类至少一个构造方法,如不想继承,需要在父类添加默认的构造方法Book(){}。

你可能感兴趣的:(java)