多态 、抽象类、抽象类和具体类的区别、抽象方法和具体方法的区别 以及 重载和重写的相同和不同之处

1. 多态

(1)运行时类型

当创建父类实例,给子类赋值:

java 复制代码
        Area a = new House(235,452);
        a.length = 234;
        a.weight = 564;
        a.imfor("公寓");
        System.out.println(a.getClass());

运行结果:

在编译期间,编译器会认为 imfor()方法时 Area 类 中的实例方法。

而在运行阶段,引用变量 a 所指向的实例的类型称为 运行时类型

当子类声明了从父类中继承的 同名字段 时,就说子类 隐藏(hide) 了从父类继承的 同名字段。

因为 重写,多态 都是针对 方法的 ,不是针对 字段 的。

父类 Area:

java 复制代码
	int num;    

	{
        logger.info("父类类方法");
        num = 10;
    }

子类House:

java 复制代码
    int num;

    {
        logger.info("子类的类方法");
        num = 11;
    }

其运行结果为:

由此我们可以看到,子类并没有在父类的同名方法上 "重写"了,而恰恰相反,依旧会执行,只不过子类 ***隐藏(hiding)***了从父类继承的 同名类方法。

若子类重新定义 同名 ,同返回 的类方法时,就说子类 ***隐藏(hiding)***了从父类继承的 同名类方法。

2.抽象类(abstract)

具体类(concrete class):可实例化。

抽象类(abstract class):不可实例化。

java 复制代码
public abstract class 类名{

}

抽象类中可以没有抽象方法。

通过创建具体子类(非抽象类)的实例 间接 给抽象类 创建了 实例。(建议将抽象中的构造方法用 protected 修饰,仅为其子类提供)。

被 abstract 修饰的方法被称作 抽象方法。

抽象方法没有方法体,以分号结束。

java 复制代码
public void Imfor();
  • 包含抽象方法的类必然是抽象类
  • 在具体类(子类)中要 实现 抽象类(父类) 的 所有抽象方法
  • 只要在方法中有 "{}",该方法就不是抽象方法了(有方法体就不为抽象方法了)。

3.抽象类和具体类的区别

  1. 抽象方法必须为 public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
  2. 抽象类不能用来创建对象
  3. 如果一个类继承于一个抽象类,则子类必须实现父类的所有抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

4.抽象方法和具体方法的区别

  1. 抽象方法不具有方法体 ,而普通方法有方法体
  2. 抽象方法需要用abstract修饰。

5.重载 和 重写的相同和不同之处

相同之处:
  • 都是从父类继承的方法
  • 都要对父类继承过来的方法进行改变。
  • 在父类声明为 final 的方法不可修改
不同之处:
  • 重写时,要被重写的方法的返回值,参数列表都不可改变。并且修饰的修饰符只能范围变小,不能变大。抛出的异常只能说时要重写的方法异常相同或者时子类;而重载必须改变参数列表,也可以修改返回值,返回值,并且可以重新声明新的异常。

  • 重写时:子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法;子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

    重载时:方法能够在同一个类中或者在一个子类中被重载。

相关推荐
郝亚军4 分钟前
如何安装webstorm、Node.js和vue CLI
前端·javascript·vue.js
IT_陈寒4 分钟前
React的useEffect依赖项把我坑惨了
前端·人工智能·后端
东方小月34 分钟前
从零开发一个Coding Agent:monorepo项目搭建
前端·后端·node.js
葬送的代码人生38 分钟前
别再让 AI 瞎写代码了!Vibe Coding 三步法教你写出靠谱代码
前端·设计模式·架构
Shirley~~39 分钟前
Code-Review-Graph:面向 AI 辅助代码审查的结构化上下文引擎
前端·ai编程
AC赳赳老秦40 分钟前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit1 小时前
Java+Ai+vue
java·spring·maven
qq_2518364571 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长1 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++