在学习Java中面向对象是最重要的,那么面向对象中有三个基石:封装,继承,多态。今天让我们看一下三大基石的最后一个:多态。
一,多态的概念。
多态首先是建立在继承的基础上的,先有继承才能有多态。
多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。
二,实现多态的必要条件
① 必须有继承
② 有重写
③ 父类引用指向子类对象
如: Anmail dog = new Dog(); //父类引用指向子类对象
三,使用多态的好处
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父类对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
及:使用多态可以大大增强程序的可维护性和可扩展性!
四,什么是抽象类? 它的特点?
①,概念:使用abstract关键字修饰的类叫做抽象类。
②,特点:抽象类不能实例化。
五,什么是抽象方法?它的特点?
① 概念:使用abstract关键字修饰的方法叫做抽象方法。
② 特点:抽象方法没有方法体,它必须由子类重写。(包含抽象方法的类一定要声明为抽象类,但是抽象类不一定都是抽象方法,抽象类中可以有具体实现的方法。)
示例代码:
①父类:
public abstract class Person {
protected String name;//姓名
protected int age;//年龄
protected String 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 Person(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
//自我介绍
public void show(){
System.out.println("我叫"+this.name+",年龄为"+this.age+",性别是"+this.sex);
}
//sayhello方法
public abstract void sayHello();
}
② student 类
public class Student extends Person {
public Student(String name, int age, String sex) {
super(name, age, sex);
}
//重写sayhello
@Override
public void sayHello() {
System.out.println("你好!我是学生!!!");
}
//学习的方法
public void xuexi(){
System.out.println("我正在学习!!!");
}
}
③ teather类
public class Teacher extends Person {
private int salary;//工资(自己私有的)
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;}
public Teacher(String name, int age, String sex,int salary) {
super(name, age, sex);
this.salary = salary;
}
//重写sayhello
@Override
public void sayHello() {
System.out.println("你好!我是马老师!!");
}
//领取工资的方法
public void ling(){
System.out.println("我领钱了!!");
}
}
④ 测试类(text)
public class Test {
public static void main(String[] args) {
Teacher ma = new Teacher("马老师",20,"女",80000);
ma.sayHello();
ma.show();
ma.ling();
System.out.println();
Student xiaoxin = new Student("小新",10,"男");
xiaoxin.sayHello();
xiaoxin.show();
xiaoxin.xuexi();
}
}