继承

2022-02-07  本文已影响0人  雪燃归来

继承: 继承是从已有的类创建新类的过程
java只支持单继承
构造方法不能被继承
创建子类的对象时, 父类的构造方法也会被调用,为什么?
因为子类要使用到父类的数据,那么就要通过父类的构造方法来初始化数据
创建子类对象时会调用父类的默认构造方法

一、认识继承

1、继承一个父类,只能继承非私有的数据(属性和方法)

class Dog{
    private String name;
    private String sex;
    public void eat(){
        System.out.println("吃饭");
    }
}

class HomeDog extends Dog{
    public void print(){
        System.out.println(name + "我是一只家狗, wangwang");
    }
}

class HuskyDog extends Dog{
    public void show(){
        System.out.println(name+ "我是husky,我能跳舞");
    }
}
private修饰的属性不能被继承

2、protected访问权限修饰符,在继承关系中使用,在父类中使用protected修饰的属性或方法可以被子类继承

public class Test1 {
    public static void main(String[] args) {
        HomeDog homeDog = new HomeDog("旺财");
        homeDog.print();
    }
}

class Dog{
    protected String name;
    private String sex;
    public Dog(){
        System.out.println("我是Dog的构造方法");
    }
    public Dog(String name){
        this.name = name;
        System.out.println("这个会被执行吗?");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

class HomeDog extends Dog{
    public HomeDog(String name){
        this.name = name;
        System.out.println("我是HomeDog的构造方法");
    }
    public void print(){
        System.out.println(name + "我是一只家狗, wangwang");
    }
}

class HuskyDog extends Dog{
    public HuskyDog(){
        System.out.println("我是HuskyDog的构造方法");
    }
    public void show(){
        System.out.println(name+ "我是husky,我能跳舞");
    }
}

二、继承的特点

1、继承是发生在对歌类之间的
2、继承使用关键字 extends
3、JAVA只支持单继承,允许多层继承
4、被继承的类叫父类(超类),继承父类的类叫子类(派生类)
5、在父类中的非私有属性和方法可以被子类继承
6、protected(受保护的访问权限修饰符),修饰的属性和方法可以被子类继承
7、构造方法不能被继承
8、创建对象会调用构造方法,调用构造方法不一定是创建对象
9、实例化子类对象,会先调用父类的构造方法,如果父类中没有默认的构造方法,那么子类必须显式的通过super(...)来调用父类的带参构造方法,super也只能放在在子类构造方法中第一句。

public class Test1 {
    public static void main(String[] args) {
        HomeDog homeDog = new HomeDog("旺财");
        homeDog.print();
    }
}

class Dog{
    protected String name;
    private String sex;
    public Dog(String name, String sex){
        this.name = name;
        this.sex = sex;
        System.out.println("这个会被执行吗?");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

class HomeDog extends Dog{
    public HomeDog(String name){
        super(name, "公"); // 只能出现在第一句
        System.out.println("我是HomeDog的构造方法");
    }
    public void print(){
        System.out.println(name + "我是一只家狗, wangwang");
    }
}

class HuskyDog extends Dog{
    public HuskyDog(){
        super("husky", "母");
        System.out.println("我是HuskyDog的构造方法");
    }
    public void show(){
        System.out.println(name+ "我是husky,我能跳舞");
    }
}

三、继承的好处

1、提高代码的可用性
2、提高代码的维护行
3、让类与类之间产生关系,是多态的前提

四、继承的缺点

增强了类与类之间的耦合性

开发原则: 高内聚 低耦合
上一篇下一篇

猜你喜欢

热点阅读