美文网首页
Java 继承

Java 继承

作者: 持续5年输出bug | 来源:发表于2021-08-23 18:44 被阅读0次
    继承

    继承可以理解为一个对象从另一个对象获取属性的过程
    1.通过 extends 关键字可以申明一个类是继承另外一个类而来的
    2.类的继承是单一继承,一个子类只能拥有一个父类;
    3.子类可以继承父类所有非私有成员属性和方法;
    4.父类不可以访问子类的特有成员。
    5.子类可以通过方法重写改变从父类继承的方法(除父类构造方法外)。
    6.父类的构造方法不能被子类继承和重写。

    // 以下分别定义和封装了三个成员属性以及成员属性的getter/setter方法、构造方法(带参和无参)、成员方法
    package com.imcoc.animal;
    
    public class Animal {
        private String name; // 私有属性
        private int month; // 私有属性
        private String pries; // 私有属性
    
        public Animal() {}
        public Animal(String name, int month) {}
        public int getMonth() {
            return month;
        }
        public void setMonth(int month) {
            this.month = month;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void run() {
            System.out.println(this.name+"在跑动");
        }
    }
    

    1.子类通过 extends 关键字继承父类Animal的非私有成员属性和方法
    public class Dogs extends Animal { // 代码块}
    2.一个子类只能有一个父类,但是一个父类可以有多个子类

    //子类拥有自己的一些成员属性和方法
    public class Dogs extends Animal {
        private double weight;
    
        public double getWeight() {
            return weight;
        }
    
        public void setWeight(double weight) {
            this.weight = weight;
        }
    
        public void eat() {
            System.out.println(this.getName() + this.weight + "斤重,在吃狗粮");
        }
    
        public void other() {
            System.out.println(this.getName() + "是" + this.getBreeds() + "品种");
        }
    }
    

    3.子类可以访问父类的非私有成员属性和方法

    package com.imcoc.test;
    import com.imcoc.animal.Dogs;
    public class Test {
        public static  void main(String[] args){
            Dogs dogs = new Dogs();
            dogs.setName("花花"); // 可以访问父类的setName()方法 注意这里是setName()方法不是name 成员属性
            dogs.setWeight(2);
            dogs.setBreeds("中华田园犬"); // 可以访问父类的setBreeds()方法
            dogs.run(); // 可以访问父类的方法
            dogs.other();
        }
    }
    

    4.父类不可以访问子类的成员属性和方法

        Animal animal = new Animal();
        animal.eat(); // 这样写报错的
    

    以下只能.出的方法和属性都是Animal父类自己的


    父类不可以访问子类的成员属性和方法.png

    5.方法重写
    a.以下要素必须与父类继承的方法完全一致:返回值类型、方法名、参数类型、顺序、个数;
    b.要定义在有继承关系的子类中 *
    c.
    方法的访问修饰符在一定范围内允许与变化,但重写的方法访问修饰符范围要>=父类访问修饰符*
    d.与方法的参数名无关

    public class Dogs extends Animal {
        public void run() { //子类重写了父类的run 方法
            System.out.println(this.getName()+"在睡觉");
        }
    }
    

    测试打印输出

    public class Test {
        public static  void main(String[] args){
            Dogs dogs = new Dogs();
            dogs.setName("花花");
            dogs.run(); // 此时打印输出不再是父类定义的“花花在跑动” 而是“花花在睡觉”
        }
    }
    

    6.虽然重写仅限制在方法层面,但是在子类中也是可以定义与父类重名的属性

    // 在父类中定义 character 成员属性
    public String character="调皮";
    // 在子类中重写 character
    public String character="温顺";
    // 测试
     System.out.println(dogs.character); //  打印结果 温顺
    

    相关文章

      网友评论

          本文标题:Java 继承

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