目录
1:多态的概念和实现
多态可以使我们的程序更加灵活
对于同一个方法来说,面对不同的对象会有不同的行为,这时多态就出现了
多态是方法的多态,不是属性的多态(多态与属性无关)
实现多态的3个关键:继承,方法的重写,父类引用指向子类对象
父类引用指向子类对象后,调用子类重写的方法,这是多态就出现了
看下面的代码
package com;
public class TestDuotai {
// private int id;
// private String name;
// private int age;
public void test(){
System.out.println("叫了一声");
}
public TestDuotai(){
}
public static void ttest(TestDuotai t){//static 类变量,同级别可以访问
t.test();//多态
//传入的对象不同,调用的方法就不同
}
public static void main(String[] args) {
TestDuotai t= new Dogg();
ttest(t);
ttest(new Cat());//相当于TestDoutai t=new Cat()
ttest(new Mouse());
}
}
class Dogg extends TestDuotai {
@Override
public void test() {
System.out.println("汪汪汪");
}
}
class Cat extends TestDuotai{
@Override
public void test() {
System.out.println("喵喵喵");
}
}
class Mouse extends TestDuotai{
@Override
public void test() {
System.out.println("吱吱吱");
}
}
2:对象的转型,向上转型和向下转型
父类引用直接指向子类对象,称之为向上转型,这是自动发生的
但是父类引用只能调用它编译的方法,不能调用它运行的方法,这时候就需要向下转型,是强制的
public class TestDuotai {
// private int id;
// private String name;
// private int age;
public void test(){
System.out.println("叫了一声");
}
public TestDuotai(){
}
public static void ttest(TestDuotai t){//static 类变量,同级别可以访问
t.test();//多态
//传入的对象不同,调用的方法就不同
}
public static void main(String[] args) {
TestDuotai t= new Dogg();
ttest(t);
ttest(new Cat());//相当于TestDoutai t=new Cat()
ttest(new Mouse());
TestDuotai a=new Dogg();//向上转换,自动发生
//a.seeDoor();//此时a的类型使TestDuotai 不是Dog,不能调用Dog类的方法
a=(Dogg)a;//向下转换,相当于Dog aa=(Dog) a
((Dogg) a).seeDoor();
//用instanceof 来判断对象到底属于那个类
TestDuotai e=new Dogg();
if(e instanceof Dogg) {
e = (Dogg) e;
((Dogg) e).seeDoor();
}
else if(e instanceof Cat){
e=(Cat) e;
((Cat) e).eatFish();
}
}
}
class Dogg extends TestDuotai {
@Override
public void test() {
System.out.println("汪汪汪");
}
public void seeDoor(){
System.out.println("看门中!!!");
}
}
class Cat extends TestDuotai{
@Override
public void test() {
System.out.println("喵喵喵");
}
public static void eatFish(){
System.out.println("吃鱼中");
}
}
class Mouse extends TestDuotai{
@Override
public void test() {
System.out.println("吱吱吱");
}
}