这是我在研究遗产时在网上找到的一个例子。

class Animal {

public void move() {

System.out.println("Animals can move");

}

}

class Dog extends Animal {

public void move() {

System.out.println("Dogs can walk and run");

}

}

public class TestDog {

public static void main(String args[]) {

Animal a = new Animal();

Animal b = new Dog();

a.move();   // runs the method in Animal class

b.move();   // runs the method in Dog class

}

}

我主要的困惑是主方法中的一行:Animal b = new Dog();

我明白 :

Animal是类名

b是对象引用

新的内存分配

狗是建设者电话

但'b'在哪里提到的确切?

什么是Animal b = new Dog();在做什么?

如果Dog扩展Animal,为什么它Animal b = new Dog而不是Dog b = new Dog();?

如果我用Dog b = new Dog();替换该行,那么与Animal b = new Dog();的区别是什么

动物b =新狗()意味着,动物参考和狗对象?

b引用了Dog的实例,但是b在羊皮服装中充当Animal ...狼的实例 - 欢迎使用多态

你为什么用Listlist = new ArrayList<>()?将代码与特定实现分离。与动物和狗相同。当您的狗成为猫时,您的代码中只需要进行一次更改,因为使用Animal仍然是正确的。

@MaccenWright这在内部意味着什么?这个怎么运作?它引用Animal类并为dog类创建一个对象?我无法理解内部发生的事情。

这是多态性和向上转换。 Animal b = new Dog();这一行意味着你可以使用Animal类接口,你可以在编译时使用Animals方法。但是在运行时Dog类的方法运行。

你应该从现实生活的角度来看待它。你有一只动物狗。当你调用你的动物的声音行为时,在这种情况下它是一只狗,它将返回"Aw aw aw"。如果你有动物猫,它会说"喵"。

Animal b;

声明一个名为b的变量,用于存储Animal对象。 Dog是Animal的一种吗?是。所以狗可以放入b。完全没问题。

If Dog extends Animal, why is it Animal b = new Dog and not Dog b = new Dog();

没有明显的理由,如果这是所有的代码。编写代码的人认为,让我们这样做,所以他做到了。

给定更多上下文,编写代码的人可能希望稍后存储其他动物,例如Cat。如果他宣称它像Dog b,他以后就不能在其中存储Cat。

另一个原因可能是只展示多态性。它证明了"是的,你确实可以将狗分配给动物变量。这是因为Dog扩展了Animal!"

那么Animal b和Dog b之间有什么区别?

使用当前代码,没有区别。但是如果你在Dog中声明了更多的成员,你会看到差异。我们在Dog中编写了一个名为bark的方法。使用Animal b,您无法访问bark,但使用Dog b,您可以。这是因为对于前者,编译器认为b是Animal,而不是Dog。 (实际上,这很难)

你需要更多地注重良好实践,比如编程到接口和松散耦合,而不是说"没有明显的理由,如果这就是所有的代码"。 否则很好解释。

使用Dog b = new Dog()没有任何问题。

这只是创建一个Dog对象。

现在,

Animal a = new Animal();

动物b =新狗();

对象b即使具有Animal引用,Dog对象也会在运行时创建。所以基本上你可以使用超类引用来实例化子类对象。因此,这仅用于显示方法覆盖,因为您可以使用超类引用调用子类方法"move"。

"="的左手表示变量"b"的声明类,右手是精确的类。

Class Dog扩展了Animal类,一个变量可以声明为父类,并由子类实现。

运行下面的代码,你可以得到"真实"。

System.out.println(b instanceof Animal); //真正

System.out.println(b instanceof Dog); //真正

java 方法继承方法_Java继承和方法重写相关推荐

  1. 怎么让java技术变强_java中的方法

    方法是什么? 方法是可以完成某个特定的功能的并且可以被重复利用的代码片段,方法的出现,让代码有了很强大复用性 方法定义: [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; } 形式参数列 ...

  2. java get set写法_java get set方法的使用

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念.下面是学习啦小编为您带来的java get set方法的使用,希望对大家有所帮助. jav ...

  3. Java 中array.size()_Java ArrayDeque size()方法与示例

    ArrayDeque类size()方法size()方法在java.lang包中可用. size()方法用于返回存储在此双端队列中的大小(元素数). size()方法是一个非静态方法,只能通过类对象访问 ...

  4. java printstream 覆盖了_Java PrintStream clearError()方法与示例

    PrintStream ClassclearError()方法clearError()方法在java.io包中可用. clearError()方法用于清除此PrintStream的内部错误状态. cl ...

  5. java 方法的重载_Java中的方法和方法重载

    今天我们来说说Java中的方法和方法重载以及需要注意的一些地方; 方法: Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段, 声明格式: [修饰符1  修饰符2 ....]  ,返 ...

  6. java isfile 的用法_Java File isFile()方法

    Java File isFile()方法 java.io.File.isFile() 检查表示此抽象路径名的文件是否是一个正常的文件. 1 语法 public boolean isFile() 2 参 ...

  7. java中扫描仪程序_Java扫描仪delimiter()方法及示例

    扫描仪类delimiter()方法delimiter()方法在java.util包中可用. delimiter()方法用于检索当前与分隔符匹配的Scanner的模式. delimiter()方法是一种 ...

  8. java使用drawtext重叠_Java Graphics.drawText方法代碼示例

    本文整理匯總了Java中org.eclipse.draw2d.Graphics.drawText方法的典型用法代碼示例.如果您正苦於以下問題:Java Graphics.drawText方法的具體用法 ...

  9. java集合的遍历_java集合遍历方法总结

    java集合遍历方法总结 一.for循环遍历集合 使用条件: ①能否确定集合中的元素个数 ②集合是否可以通过整数索引值来精确位置 public static void forTraversal(){ ...

  10. java继承总结_java继承总结(二)

    java学习笔记 1.继承 关键字: extends 在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类. eg: public class P ...

最新文章

  1. 6G目前进展与未来展望
  2. py2 HTMLTestRunner报告
  3. 【opencv】16.截取图像中的一个roi区域时,判断该roi是否越界
  4. 后端视角下的前端框架之Vue.js初探
  5. ios弧形进度条_iOS如何实现环形进度条加载效果
  6. kong网关从入门到精通_可能国内最好的网关开源项目,支持 Dubbo、SpringCloud,经历多年双11高并发的场景验证
  7. java 12_为什么在Java(高低)/ 2是错误但(高低) 1不是?
  8. hdu 1284 钱币兑换问题 (递推 || DP || 母函数)
  9. ASCII码与10进制、16进制转换对照表
  10. JDY-24M钥匙标签使用说明
  11. RK3328 中文介绍
  12. shapley值法初学入门详细介绍
  13. 万字总结:金融市场基础知识
  14. python apkg_GitHub - TonyDongGuaPi/pc_wxapkg_decrypt_python: PC微信小程序 wxapkg 解密
  15. 上波浪线符号复制_Word上中下划波浪线符号怎么打
  16. GAMES101-现代计算机图形学入门-闫令琪——Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering) 学习笔记
  17. 计算机word表格怎么求和,如何在Word中插入Excel自动汇总a求和表格,上班族必备技巧...
  18. Java项目:ssm+jsp实现手机WAP版外卖订餐系统
  19. i3 10100F和R3 3200G哪个好
  20. WIN10隐藏任务栏和桌面图标(简易实现)

热门文章

  1. 统计学习:三大奇技(1)
  2. 深度探索va_start、va_arg、va_end
  3. MATLAB——阈值分割(一)
  4. 【Python】如何在文件夹里批量分割图片?
  5. [云炬创业学笔记]第一章创业是什么测试15
  6. [云炬创业管理笔记]第二章测试4
  7. java switch 值_Java switch多值匹配操作详解
  8. Sdk Manager.exe 闪退问题的解决
  9. Delphi指针大全
  10. 数组中删数(只删一个)