多态===============================================
1.有继承
2.有方法的重写
3.父类引用指向子类对象
满足以上三句话就是多态
特点如下:
1.调用重写过的方法,实际是调用子类的方法
2.调用父类的方法
3.不能调用子类中特有的方法
注:
所需要调用子类特有方法或者成员变量需要将其强转成子类
只能强转成原来的子类,不能强转成别的子类,否则编译检查不出来不过运行会报错
优点:
写下一个父类的static方法,重写各自子类的public方法,可以实现不改写父类static方法的情况下根据传入对象属于子类的不同执行不同的子类里面重写的那个方法。
//===============================================
public class sum {
public static void main(String[] args){
Father f = new Son();
f.play();//调用的是子类中的方法
f.smoke();//调用的是父类中的方法
Father f2 =new Daughter();
f2.play();
f2.smoke();
// f2.drink();//无法调用子类专有方法
//多态实例
doSth(new Son());
doSth(new Daughter());
//无法调用父类没有的子类方法
Son s = (Son)f;
s.game();//经过强转后能实现调用子类专有方法
}
public static void doSth(Father father){
father.play();
}
}
//===============================================
class Father{
public void play(){
System.out.println("爸爸爱玩");
}
public void smoke(){
System.out.println("饭后来一根");
}
}
//===============================================
class Son extends Father{
public void play(){
System.out.println("儿子爱玩");
}
public void game(){
System.out.println("打游戏");
}
}
//===============================================
class Daughter extends Father{
private String name = "奶茶妹妹";
public void play(){
System.out.println("爱上京东");
}
public void drink(){
System.out.println("爱喝奶茶");
}
}
1.有继承
2.有方法的重写
3.父类引用指向子类对象
满足以上三句话就是多态
特点如下:
1.调用重写过的方法,实际是调用子类的方法
2.调用父类的方法
3.不能调用子类中特有的方法
注:
所需要调用子类特有方法或者成员变量需要将其强转成子类
只能强转成原来的子类,不能强转成别的子类,否则编译检查不出来不过运行会报错
优点:
写下一个父类的static方法,重写各自子类的public方法,可以实现不改写父类static方法的情况下根据传入对象属于子类的不同执行不同的子类里面重写的那个方法。
//===============================================
public class sum {
public static void main(String[] args){
Father f = new Son();
f.play();//调用的是子类中的方法
f.smoke();//调用的是父类中的方法
Father f2 =new Daughter();
f2.play();
f2.smoke();
// f2.drink();//无法调用子类专有方法
//多态实例
doSth(new Son());
doSth(new Daughter());
//无法调用父类没有的子类方法
Son s = (Son)f;
s.game();//经过强转后能实现调用子类专有方法
}
public static void doSth(Father father){
father.play();
}
}
//===============================================
class Father{
public void play(){
System.out.println("爸爸爱玩");
}
public void smoke(){
System.out.println("饭后来一根");
}
}
//===============================================
class Son extends Father{
public void play(){
System.out.println("儿子爱玩");
}
public void game(){
System.out.println("打游戏");
}
}
//===============================================
class Daughter extends Father{
private String name = "奶茶妹妹";
public void play(){
System.out.println("爱上京东");
}
public void drink(){
System.out.println("爱喝奶茶");
}
}