当前位置: 首页 > article >正文

java-抽象类注意点

ChinesePerson 类
public class ChinesePerson extends Person{

    public ChinesePerson(){}

    public ChinesePerson(String name, int age){
        super(name, age);
    }

    @Override
    public void greet() {
        System.out.println("你好,我的名字叫" + this.getName());
    }
}

EnglishPerson类

/**
 * 一个非抽象的类继承抽象类之后,必须将抽象类中所有的抽象方法全部重写/实现。
 */
public class EnglishPerson extends Person {

    public EnglishPerson(){
        super();
    }

    public EnglishPerson(String name, int age){
        super(name, age);
    }

/*    @Override
    public void greet() {
        System.out.println("Hello, my name is " + this.getName());
    }*/
}

Person类:

/**
 * 人类
 */
abstract public class Person { // 父类(所有子类的公共属性+公共方法的一个集合体)
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 显示人类的详细信息
     */
    public void display(){
        System.out.println("名字:" + this.getName() + ",年龄:" + this.getAge());
    }

    /**
     * 问候的方法,不同国家的人,问候的方式肯定是不同的。
     * 因此,具体是怎么问候的,Person中是不确定,无法实现的。
     * 针对这种方法既然不确定具体的实现是什么,那么就不应该给实现。
     * 注意:在java中,只要一个方法带着大括号,不管大括号中有什么,
     * 只要有大括号就表示一种实现。
     *
     * 因此像这种无法确定实现的方法,建议定义为抽象方法。
     */
    //public void greet(){}

    // 抽象方法怎么定义:修饰符列表中添加abstract,然后不能有方法体,以“;”结束。
    // public和abstract关键字的顺序没有要求。
    // 当一个类中有抽象方法,java要求该类必须是抽象的。
    public abstract void greet();
}

PersonTest类:

public class PersonTest {
    public static void main(String[] args) {
        // 多态
        Person p1 = new EnglishPerson("jack", 20);
        p1.display();
        p1.greet();

        Person p2 = new ChinesePerson("张三", 30);
        p2.display();
        p2.greet();

        // 抽象类虽然有构造方法,但是无法实例化。
        // 抽象类中构造方法的作用:给子类实现的。
        //new Person();

    }
}

1.一个非抽象的类继承抽象类之后,必须将抽象类中所有的抽象方法全部重写/实现。

错误分析

你遇到的错误信息 Class 'EnglishPerson' must either be declared abstract or implement abstract method 'greet()' in 'Person' 是 Java 编译器给出的错误提示,意思是 EnglishPerson 类必须满足以下两个条件之一:

  1. 声明为抽象类:如果 EnglishPerson 类不想实现 Person 类中的抽象方法 greet(),那么它自身必须被声明为抽象类。抽象类不能被实例化,通常作为其他类的基类。
  2. 实现抽象方法:如果 EnglishPerson 类不是抽象类,那么它必须实现 Person 类中定义的抽象方法 greet()


http://www.kler.cn/a/529489.html

相关文章:

  • C++模板初了解
  • AI(计算机视觉)自学路线
  • 【etcd】二进制安装etcd
  • 【Docker】ubuntu中 Docker的使用
  • MySQL 插入数据
  • DiffuEraser: 一种基于扩散模型的视频修复技术
  • python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理
  • C++ 泛型编程指南02 (模板参数的类型推导)
  • 【Block总结】门控轴向注意力Gated Axial-Attention|即插即用
  • 代码练习2.3
  • 为何 git 默认是 master分支,而github默认是main分支(DeepSeek问答)
  • MiniMax:人工智能领域的创新先锋
  • git安装flutter
  • 【含文档+PPT+源码】基于微信小程序的校园快递平台
  • SpringBoot 整合 SpringMVC:SpringMVC的注解管理
  • 封装 JDK 自带的 HttpServer
  • 笔记:电机系统性能标定测试怎么进行?
  • 【Go - 小心! Go中slice的传递陷阱 】
  • 第七篇:数据库备份与恢复
  • UE5 蓝图学习计划 - Day 10:UI 系统(HUD 与 Widget)
  • Web - CSS3基础语法与盒模型
  • python爬虫从0到1 - Scrapy框架的实战应用
  • 蓝桥杯备考:模拟算法之字符串展开
  • ubuntu22.04防火墙策略
  • VSCode设置颜色主题
  • 实体类实现Serializable接口