解析java中向下转型和向上转型
前提
两个类必须具备父子关系
1 向上转型
1.1 内容
a 子类的实例化对象赋值给父类型引用
b 父类型引用指向子类型的实例化对象
1.2 为什么要用?
为了实现多态功能
1.3 如何用?
1.3.1 语法
父类型 父类型对象=new 子类型();
如Animal animal01=new Dog();
//其中Dog类是Animal的一个子类
1.3.2 示例代码
Animal01
package Work;
public class Animal01 {
private String name;
//姓名
private int age;
//年龄
private String sex;
//性别
public Animal01() {
}
public Animal01(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void say(){
System.out.println("动物在说话!!!!");
}
}
Dog01
package Work;
public class Dog01 extends Animal01{
public Dog01() {
}
public Dog01(String name, int age, String sex) {
super(name, age, sex);
}
@Override
public void say() {
System.out.println("汪汪汪");
}
}
Cat01
package Work;
public class Cat01 extends Animal01{
public Cat01() {
}
public Cat01(String name, int age, String sex) {
super(name, age, sex);
}
@Override
public void say() {
System.out.println("喵喵喵");
}
}
Test
package Work;
public class Test {
public static void main(String[] args) {
Animal01 animal01=new Cat01();
Animal01 animal02=new Dog01();
animal01.say();
animal02.say();
}
}
1.3.3 示例代码运行截图
2 向下转型
2.1 内容
父类型对象强转成子类型,然后把结果赋值给子类型对象
2.2 为什么要用?
使用多态后,为了使其独有的方法能够被调用
2.3 如何用?
2.3.1 语法
子类型 子类型对象=(子类型(父类型对象))
如Animal animal01=new Dog();
Dog dog01=((Dog)animal01);
//其中Dog类是Animal的一个子类
2.3.2 示例代码
Animal01
package Work;
public class Animal01 {
private String name;
//姓名
private int age;
//年龄
private String sex;
//性别
public Animal01() {
}
public Animal01(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void action(){
//this就是谁调用,代表是谁
if(this instanceof Dog01){
((Dog01)this).guardDoor();
}else if(this instanceof Cat01){
((Cat01)this).catchMouse();
}
}
}
Dog01
package Work;
public class Dog01 extends Animal01{
public Dog01() {
}
public Dog01(String name, int age, String sex) {
super(name, age, sex);
}
public void guardDoor(){
System.out.println("狗狗在看门!!!");
}
}
Cat01
package Work;
public class Cat01 extends Animal01{
public Cat01() {
}
public Cat01(String name, int age, String sex) {
super(name, age, sex);
}
public void catchMouse(){
System.out.println("猫咪在捉老鼠!!!");
}
}
Test
package Work;
public class Test {
public static void main(String[] args) {
Animal01 animal01=new Cat01();
Animal01 animal02=new Dog01();
animal01.action();
animal02.action();
}
}