继承 extends

2 篇文章 0 订阅
1 篇文章 0 订阅

继承 extends

成员变量:
  • 无论父类成员变量是私有还是非私有的,子类继承父类的全部特征.

    // 父类 Animal
    public class Animal {
        public int age;
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    // 子类 Dog
    public class Dog extends Animal{
        public void set(){
            this.age = 1;
            setName("小狗");
            System.out.println(getName() + '\t' + age);
        }
    }
    // main方法
    public class Test {
        public static void main(String[] args) {
            Dog a1 = new Dog();
            a1.set();
        }
    }
    
    • image-20240330104205644
  • 子类定义的成员变量永远不会覆盖子类所继承父类的特征

    public class Animal {
        private String name;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    public class Dog extends Animal{
    
        public String name;
        public void set(){
            this.name = "小狗";
            // this.name 相当于 name
            super.setName("小动物");
            System.out.println("Fu: " + super.getName());
            System.out.println("Zi: " + this.name);
        }
    }
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            Dog a1 = new Dog();
            a1.set();
        }
    }
    
    

    image-20240330102905477

  • 子类不包含成员变量时, this, super指向同一个变量

    public class Animal {
        private String name;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    public class Dog extends Animal{
        public void setNames() {
            // this.setName("小狗");
            setName("小狗");
            super.setName("小动物");
            System.out.println("Fu: " + super.getName());
            System.out.println("Zi: " + this.getName());
    
        }
    }
    
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            Dog a1 = new Dog();
            a1.setNames();
        }
    }
    
    
    • image-20240330101723676
构造方法:
  • 所有构造方法,子类都无法继承,但可以借用父类的构造方法,给对象赋初值

    // 父类 Animal
    public class Animal {
        private int age;
        private String name;
        public Animal() {
        }
        public Animal(int age, String name) {
            this.age = age;
            this.name = name;
        }
        @Override
        public String toString() {
            return "Animal{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    // 子类 Dog
    public class Dog extends Animal{
        public Dog(){}
        public Dog(int age, String name){
            super(age, name);
        }
    }
    // main 方法
    import java.util.Scanner;
    public class Test {
        public static void main(String[] args) {
            Dog a1 = new Dog(1, "小狗");
            System.out.println(a1);
        }
    }
    
    • image-20240330110302842
  • 子类中所有的构造方法默认先访问父类中的无参构造, 再执行自己

     // 父类 Animal
    public class Animal {
        private int age;
        private String name;
    
        public Animal() {
            System.out.println("父类无参构造执行");
        }
    
        public Animal(int age, String name) {
            this.age = age;
            this.name = name;
        }
    }
    // 子类 Dog
    public class Dog extends Animal{
        public Dog(){
            System.out.println("子类无参构造执行");
        }
        public Dog(int age, String name){
        }
    }
    // main 方法
    public class Test {
        public static void main(String[] args) {
            Dog a1 = new Dog();
            Dog a2 = new Dog(1, "小狗");
        }
    }
    
    // 父类无参构造执行
    // 子类无参构造执行
    // 父类无参构造执行
    
    • image-20240330113843966

    • img

成员方法:
  • 非私有的成员方法可以被继承, 私有的成员方法无法被继承
  • image-20240330115959509
重写:
  1. 重写方法的名称、形参列表必须与父类中的一致.
  2. 子类重写父类方法时,访问权限子类必须大于等于父类
    • (default < protected < public )
  3. 子类重写父类方法时,返回值类型子类必须小于等于父类
    • image-20240330122358757
  4. 建议:重写的方法尽量和父类保持一致。
  5. 私有方法不能被重写。
  6. 子类不能重写父类的静态方法,如果重写会报错的。

访问权限子类必须大于等于父类

  • (default < protected < public )
  1. 子类重写父类方法时,返回值类型子类必须小于等于父类
    • [外链图片转存中…(img-oRzAKbmF-1711772827147)]
  2. 建议:重写的方法尽量和父类保持一致。
  3. 私有方法不能被重写。
  4. 子类不能重写父类的静态方法,如果重写会报错的。

其中5. 6点可总结为 只有被添加到虚方法表中的方法才能被重写

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值