面向对象特征:抽象、封装、继承、多态
目录
多态:
(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
多态体现为:父类引用变量可以指向子类对象。
前提条件:必须有继承关系。
注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
实现多态的三种方法:
1.方法的重写
2.继承父类
public class Father {
}
public class Son extends Father{
}
public class TestSon {
public static void main(String[] args) {
// Father father = new Father();
// Son son = new Son();
//下面这行就称为多态(父类的引用指向了子类的对象)
//通俗记忆小的赋值给大的
// father = son;
//下面这行称为强制类型转换
// son = (Son)father;
//多态的简写形式
Father father = new Son();
}
}
public class Grandma extends Object {
}
public class Mom extends Grandma{
}
public class Daughter extends Mom{
}
public class TestDaughter {
public static void main(String[] args) {
//把小的赋值给大的称为向上转型
// Grandma grandma = new Daughter();
//把小的赋值给大的称为向上转型
// Mom mom = new Daughter();
//把大的赋值给小的就称为向下类型转换
// Daughter daughter = (Daughter) grandma;
//把大的赋值给小的就称为向下类型转换
// Daughter daughter2 = (Daughter) mom;
//向下类型转换之前必须得先向上类型转换
//如果不向上类型转换,直接向下类型转换会报错
//ClassCastException类转换异常
// Daughter daughter = (Daughter) new Grandma();
//因为Object是最大的类可以接收一切对象
Object obj = new Grandma();
Object obj2 = new Mom();
Object obj3 = new Daughter();
}
}
3.实现抽象类、抽方法
//定义抽象类
public abstract class Animal {
public static final String RACE = "动物";
private String name;
private Integer age;
private String sex;
/**抽象方法*/
public abstract void sleep(Integer time);
public abstract String loveFoods(String foods);
/**普通方法*/
public void run(){
System.out.println("跑");
}
public void eat(){
System.out.println("吃");
}
/**构造器*/
public Animal(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public static String getRACE() {
return RACE;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//定义抽象类子类
public class AnimalImpl extends Animal {
private String color;
@Override
public void sleep(Integer time) {
System.out.println("睡眠"+time+"小时");
}
@Override
public String loveFoods(String foods) {
return "喜欢吃"+foods;
}
/**
* 构造器
*
* @param name
* @param age
* @param sex
*/
public AnimalImpl(String name, Integer age, String sex,String color) {
super(name, age, sex);
this.color=color;
}
}
//抽类、抽象方法实现多态
public class AnimalImplTest {
public static void main(String[] args) {
// 匿名对象类
Animal animal = new Animal("狗",2,"nan") {
@Override
public void sleep(Integer time) {
}
@Override
public String loveFoods(String foods) {
return null;
}
};
Animal animal1 = new AnimalImpl("猫",2,"女", "橘黄色");
animal.eat();
animal.run();
animal1.run();
animal1.eat();
animal1.loveFoods("鱼");
animal.loveFoods("肉");
String race = Animal.RACE;
System.out.println(race);
}