java语言3大特征之一——多态。
多态为开发提供了很多的便利,为可扩展性提供很大的支持。
Person类:
Person子类,带有sex属性:
两者均有say()方法。
下面是测试代码:
输出结果:
解:java的引用变量分为编译时类型和运行时类型。上边的p2引用,在编译时属于Person类型,而运行时属于Person子类PersonWithSex类型。所以p2只能调用Person类中的方法,如果试着调用其子类独有的方法,就会出现编译错误。
当我们想再有一个Person的子类时,同样定义了say()方法,这样只要在创建对象时创建新类型的对象,其他的地方就无需改变,这就是多态的好处。还有很多多态的好处,如范型等,慢慢研究喽
多态为开发提供了很多的便利,为可扩展性提供很大的支持。
public enum Sex {
MALE,FEMALE;
}
Person类:
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void say() {
System.out.println(this.getName() + ":" + this.getAge());
System.out.println("in base");
}
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;
}
}
Person子类,带有sex属性:
public class PersonWithSex extends Person {
Sex sex;
PersonWithSex() {
}
PersonWithSex(int age, String name, Sex sex) {
super(name, age);
this.sex = sex;
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
public void say() {
System.out.println(this.getName() + ":" + this.getAge() + ":" + this.getSex());
System.out.println("in sub");
}
}
两者均有say()方法。
下面是测试代码:
public class ExtendsTest {
/**
* @param args
*/
public static void main(String[] args) {
Person p1 = new Person("jin", 10);
PersonWithSex pws = new PersonWithSex(20, "gui", Sex.MALE);
Person p2 = new PersonWithSex(30, "randy", Sex.MALE);
p1.say();
pws.say();
p2.say();
}
}
输出结果:
jin:10
in base
gui:20:MALE
in sub
randy:30:MALE
in sub
解:java的引用变量分为编译时类型和运行时类型。上边的p2引用,在编译时属于Person类型,而运行时属于Person子类PersonWithSex类型。所以p2只能调用Person类中的方法,如果试着调用其子类独有的方法,就会出现编译错误。
当我们想再有一个Person的子类时,同样定义了say()方法,这样只要在创建对象时创建新类型的对象,其他的地方就无需改变,这就是多态的好处。还有很多多态的好处,如范型等,慢慢研究喽