使用多态时,判断能否向下转型的两种思路
1 使用instanceof关键字
1.1 核心思路
判断该对象是否是某个类的实例(如animal01是否是Dog实例化产生的)
1.2 示例代码
Animal类
package Work;
public class Animal {
private String name;
//姓名
private int age;
//年龄
public Animal() {
}
public Animal(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;
}
}
Dog类
package Work;
public class Dog extends Animal{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
public void guardDoor(){
System.out.println("狗狗在看门");
}
}
Test类
package Work;
public class Test {
public static void main(String[] args) {
Animal animal01=new Dog("旺财",10);
if (animal01 instanceof Dog){
((Dog) animal01).guardDoor();
}
}
}
1.3 示例代码运行截图
2 使用getclass()方法
2.1 核心思路
判断产生该对象的类是不是某个类(如animal01是否是Dog实例化产生的)
2.2 示例代码
Animal类
package Work;
public class Animal {
private String name;
//姓名
private int age;
//年龄
public Animal() {
}
public Animal(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;
}
}
Dog类
package Work;
public class Dog extends Animal{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
public void guardDoor(){
System.out.println("狗狗在看门");
}
}
Test类
package Work;
public class Test {
public static void main(String[] args) {
Animal animal01=new Dog("旺财",10);
if (animal01.getClass()==new Dog().getClass()){
((Dog) animal01).guardDoor();
}
}
}