面向对象之多态性
程序员文章站
2022-04-06 20:58:50
...
为什么要讲多态性
最近发现大学时候学习的知识太不扎实了,连面向对象的三大特性都不怎么了解,之前可能学了一个假的面向对象吧。
所以打算写一篇关于多态的博客。
什么是多态
多态指的是一类事物有多种形态。一般是抽象的形式,它们之间是继承的关系。
遇到的问题
直接切入正题,来讲讲我遇到了什么问题。
现在有一个父类:
public class People {
String name;
int age;
public People(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;
}
}
子类继承父类:
public class Man extends People{
String sex;
public Man(String name, int age, String sex) {
super(name, age);
this.sex = sex;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
我首先创建一个子类,将所有属性赋值到子类对象,然后将它转成父类对象:
public class test {
public static void main(String[] args) {
People people = new Man("Tom", 18, "male");
Man man = (Man) people;
System.out.println(man.getName() + "," + man.getAge() + "," + man.getSex());
}
}
调试一下,发现定义的people
里面装的是 Man
类型。
但是在people
里面却又找不到子类Man
的属性和方法。
想要调用子类属性和方法,必须转化为父类。
Man man = (Man) people;
System.out.println(man.getName() + "," + man.getAge() + "," + man.getSex());
结论
1、子类转化成父类,属性不会消失,但是父类对子类的属性不可见。
2、想要调用子类的属性,需要转化类型。