继承

作者: 雪燃归来 | 来源:发表于2022-02-07 18: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、让类与类之间产生关系,是多态的前提

    四、继承的缺点

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

    开发原则: 高内聚 低耦合

    相关文章

      网友评论

          本文标题:继承

          本文链接:https://www.haomeiwen.com/subject/rkdmkrtx.html