JAVA基础知识复习(七)-向上、下转型

本文最后更新于:December 3, 2021 pm

JAVA基础知识复习(七)。向上、下转型,instanceof 用法。

目录

向上转型

多态的体现。
现有,Person 类、Man 类。

1
2
3
4
5
6
7
8
9
10
11
//Person 类
class Person{
int age;
String name;
public void outAge(){
System.out.println("输出年龄");
}
public void outName(){
System.out.println("输出姓名");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Man 类
class Man extends Person{
int age;
String name;
public void outAge(){
System.out.println("男人的年龄");
}
public void outName(){
System.out.println("男人的姓名");
}
public void out(){
System.out.println("男人");

}
}
1
2
3
4
5
6
7
8
9
10
11
12
//测试
public class NewJavaTest {
public static void main(String[] args) {
Person p = new Man();//向上转型。编译看左,运行看右
p.outAge(); //同方法名,输出的是子类中的方法
p.outName(); //输出的是子类中的方法
}

}
//输出
男人的年龄
男人的姓名

向下转型

需要输出父类中没有,但子类中有的方法时,需要将其向下转型。

1
2
3
4
5
6
7
8
9
10
11
//Person 类
class Person{
int age;
String name;
public void outAge(){
System.out.println("输出年龄");
}
public void outName(){
System.out.println("输出姓名");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Man 类
class Man extends Person{
int age;
String name;
public void outAge(){
System.out.println("男人的年龄");
}
public void outName(){
System.out.println("男人的姓名");
}
public void out(){
System.out.println("男人");

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//测试
public class NewJavaTest {
public static void main(String[] args) {
Person p = new Man();//向上转型。编译看左,运行看右
p.outAge(); //同方法名,输出的是子类中的方法
p.outName(); //输出的是子类中的方法
Man m = new Man();
m = (Man) p; //向下转型
m.out();
}

}
//输出
男人的年龄
男人的姓名
男人

当在转型时,可能是会转型失败的。所以,需要来判断一下关系。用 instanceof 。

将上例中的测试代码改正一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class NewJavaTest {
public static void main(String[] args) {
Person p = new Man();
p.outAge();
p.outName();
if(p instanceof Person){ //判断 p 是否是 Person,如果是则进行转型,否则不进行。
Man m = new Man();
m = (Man) p;
m.out();
}
}

}
//输出
男人的年龄
男人的姓名
男人