Java 继承

声明:本文记录基于 JDK 8(8u211)的继承使用规则如果存在错误,请发邮件至2623574740@qq.com 联系我
创作时间:2023-09-17 17:07:01
创作情况:失业第47天,地处成都金牛区
创作者:一口吃不成胖子

  • 抽象类和普通类均可被继承,用final修饰的类不能被继承
  • 用final,static修饰的类属性均可被继承
  • 用final修饰的类方法可被继承;但不能重写,也不能在子类中申明同样的方法,它只能被子类对象调用
  • static修饰的类方法可以被继承,但无法重写(加@Override标签报错),子类可以写一个与父类相同的方法[这不是重写]。
  • 一个类仅能继承一个父类,一个类可以被多个类继承

父类

父类👨

/**
 * 抽象类 Animal作为父类
 * */
abstract class Animal {
    public String name;// 普通类属性,可以被继承
    public final String type="pet";//常量,被继承,但不能被对象修改
    public static int age = 0;//静态变量,被继承且所有子类共享此变量,若某子类中申明此变量则此子类对象不再共享此变量
    /**
     * 常量方法,被继承,但无法重写
     * */
    public final void desc(){
        System.out.println("这是动物类");
    }
    /**
     * 静态方法,被继承,子类可写与父类相同的方法(不是重写)
     * */
    public static void trait(){
        System.out.println("这是动物类中的一个子类");
    }
    /**
     * 抽象方法,子类必须实现(不是重写)
     * */
    abstract public void bark();
}

子类

  • 拥有父类的被final,static,public修饰的属性
  • 拥有父类的被final,static,public修饰的方法
  • 实现抽象类的抽象方法
  • 父类中final修饰的方法不能被子类重写,子类也不能写同名方法
  • 父类中static修饰的方法,子类可以再次实现,但这不叫“重写”,而且方法申明必须一模一样

cat子类👶

public class Cat extends Animal{
    public final String type = "pet cat";// 常量,子类申明后,子类对象不再使用父类中此常量
    public static int age = 11;//静态变量,子类申明后,不再共享父类中此变量
    /**
     * 重新实现trait方法,特别之处在于:若子类没有方法,则会调用父类中的此方法,若子类有,则调用子类方法,却不叫重写
     * */
    public static void trait(){
        System.out.println("这是动物类中的一个猫类");
    }
    /**
     * 实现抽象方法
     * */
    @Override
    public void bark() {
        System.out.println("喵~");
    }
}

dog子类👶

public class Dog extends Animal{
    /**
     * 实现抽象方法
     * */
    @Override
    public void bark() {
        System.out.println("汪~");
    }
}

注意点

  1. 用final修饰的父方法,子类不能重写但可以调用
  2. 在子类中不申明父类中已申明的静态变量的前提下,所有子类对象共享父类中的静态变量,子类若申明则不再共享父类的静态变量
  3. final修饰的类无法被继承
  4. private修饰的属性和方法,均不可以被子类继承和使用
posted @ 2023-09-17 12:03  勤匠  阅读(8)  评论(0编辑  收藏  举报