java 方法继承方法_Java继承和方法重写
这是我在研究遗产时在网上找到的一个例子。
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继承和方法重写相关推荐
- 怎么让java技术变强_java中的方法
方法是什么? 方法是可以完成某个特定的功能的并且可以被重复利用的代码片段,方法的出现,让代码有了很强大复用性 方法定义: [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; } 形式参数列 ...
- java get set写法_java get set方法的使用
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念.下面是学习啦小编为您带来的java get set方法的使用,希望对大家有所帮助. jav ...
- Java 中array.size()_Java ArrayDeque size()方法与示例
ArrayDeque类size()方法size()方法在java.lang包中可用. size()方法用于返回存储在此双端队列中的大小(元素数). size()方法是一个非静态方法,只能通过类对象访问 ...
- java printstream 覆盖了_Java PrintStream clearError()方法与示例
PrintStream ClassclearError()方法clearError()方法在java.io包中可用. clearError()方法用于清除此PrintStream的内部错误状态. cl ...
- java 方法的重载_Java中的方法和方法重载
今天我们来说说Java中的方法和方法重载以及需要注意的一些地方; 方法: Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段, 声明格式: [修饰符1 修饰符2 ....] ,返 ...
- java isfile 的用法_Java File isFile()方法
Java File isFile()方法 java.io.File.isFile() 检查表示此抽象路径名的文件是否是一个正常的文件. 1 语法 public boolean isFile() 2 参 ...
- java中扫描仪程序_Java扫描仪delimiter()方法及示例
扫描仪类delimiter()方法delimiter()方法在java.util包中可用. delimiter()方法用于检索当前与分隔符匹配的Scanner的模式. delimiter()方法是一种 ...
- java使用drawtext重叠_Java Graphics.drawText方法代碼示例
本文整理匯總了Java中org.eclipse.draw2d.Graphics.drawText方法的典型用法代碼示例.如果您正苦於以下問題:Java Graphics.drawText方法的具體用法 ...
- java集合的遍历_java集合遍历方法总结
java集合遍历方法总结 一.for循环遍历集合 使用条件: ①能否确定集合中的元素个数 ②集合是否可以通过整数索引值来精确位置 public static void forTraversal(){ ...
- java继承总结_java继承总结(二)
java学习笔记 1.继承 关键字: extends 在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类. eg: public class P ...
最新文章
- 6G目前进展与未来展望
- py2 HTMLTestRunner报告
- 【opencv】16.截取图像中的一个roi区域时,判断该roi是否越界
- 后端视角下的前端框架之Vue.js初探
- ios弧形进度条_iOS如何实现环形进度条加载效果
- kong网关从入门到精通_可能国内最好的网关开源项目,支持 Dubbo、SpringCloud,经历多年双11高并发的场景验证
- java 12_为什么在Java(高低)/ 2是错误但(高低) 1不是?
- hdu 1284 钱币兑换问题 (递推 || DP || 母函数)
- ASCII码与10进制、16进制转换对照表
- JDY-24M钥匙标签使用说明
- RK3328 中文介绍
- shapley值法初学入门详细介绍
- 万字总结:金融市场基础知识
- python apkg_GitHub - TonyDongGuaPi/pc_wxapkg_decrypt_python: PC微信小程序 wxapkg 解密
- 上波浪线符号复制_Word上中下划波浪线符号怎么打
- GAMES101-现代计算机图形学入门-闫令琪——Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering) 学习笔记
- 计算机word表格怎么求和,如何在Word中插入Excel自动汇总a求和表格,上班族必备技巧...
- Java项目:ssm+jsp实现手机WAP版外卖订餐系统
- i3 10100F和R3 3200G哪个好
- WIN10隐藏任务栏和桌面图标(简易实现)