gpt4 book ai didi

java - 不同的对象和引用

转载 作者:行者123 更新时间:2023-11-30 06:10:21 24 4
gpt4 key购买 nike

我试图从 Tutorials Point 学习 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 a = new Animal(); 
Animal b = new Dog();

这两者有什么区别?我熟悉第一个。有人可以简单地解释一下当以第二种方式定义对象时会发生什么吗?

最佳答案

  • Animal a = new Animal(); --> 创建一个 Animal 的实例,引用为 Animal。只有 Animal 方法可用于从 a 调用。
  • Animal b = new Dog(); --> 因为 Dog 扩展了 Animal,创建了一个 Dog 的实例code> 被引用为 Animal。只有 Animal 方法(即没有仅属于 Dog 的方法)可用于从 b 调用,但虚拟方法调用机制将解析方法覆盖 Animal 时,在运行时调用 Dog 的实现。

注意

Object 方法(equalshashCodewait 重载、notifynotifyAlltoStringgetClass) 可用于所有对象。

完整注释示例

package test;

public class Main {

public static void main(String[] args) {
/*
* Abstract class - using anonymous idiom here
* Can invoke:
* move
* forAnimalAndChildren
* all Object methods
*/
Animal animal = new Animal(){};
/*
* Instance type is Dog but reference is Animal
* Can invoke:
* move
* forAnimalAndChildren
* all Object methods
* Note that invoking "move" will
* resolve to Dog's "move" implementation at runtime,
* if any is provided in class Dog
*/
Animal dogReferencedAsAnimal = new Dog();
/*
* Instance and reference types are Dog
* Can invoke:
* move
* forAnimalAndChildren
* onlyDog
* all Object methods
*/
Dog dog = new Dog();

}
/*
* Setting this up as an abstract class, as no concrete "animals" can exist - only more specific types.
*/
static abstract class Animal {
void move() {
System.out.println("Animal moving...");
}
void forAnimalAndChildren() {
System.out.println("Anyone extending Animal can invoke me!");
}
}
static class Dog extends Animal {
@Override
void move() {
System.out.println("Dog moving...");
}
void onlyDog() {
System.out.println("Only for dogs!");
}
}
}

关于java - 不同的对象和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com