黑马程序员—java技术blog—第六篇面向对象_多态概述及基础应用

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

多态: 一种事物的多种形态

H2o
液态: 水, 雨, 雾,露水,水蒸汽 
气态: 水蒸气
固定: 冰, 雪, 霜, 雹子
水果:
苹果 ,西瓜,香蕉
人: 
男人 ,女人 ,白人 ,黑人 
动物:
猫,狗,羊 雍和宫 52号烤羊腿  
多态的前提条件 :
1.满足继承关系
2.方法重写
3.父类引用指向子类对象 
例子: //子类引用指向子类对象 
Zi z = new Zi();
//父类引用指向父类对象
Fu f = new Fu();
//父类引用指向子类对象 
Fu f = new Zi();
成员变量:
编译看左边,运行看左边
成员方法:
编译看左边,运行看右边
构造方法:
编译看左边,运行看左边 
静态方法:

编译看左边,运行看左边

多态案例:

复联2 

世界陷入了长期和平. 
托尼.斯塔克  -- 开厂

跟人合影赚钱.5块钱 


我:这是谁啊?
他:我啊,斯塔克.
我:你干嘛呢?
他:合影5块
---------------------------
救命啊~~~ 
我得救人,我变身,钢铁侠
飞 
救人


定义人类 {

//姓名 


//挣钱 
getMoney(){
syso("开厂子");
}
}
定义钢铁侠类 extends 人类{
//姓名 
//挣钱 
getMoney(){
syso("合影");
}

}
向下转型,从父到子 
Person p = new IronMan()
格式:子类类型 变量名 = (子类类型) 父类变量名;
IronMan im = (IronMan) p;
*/

class  PersonTest{
public static void main(String[] args){
System.out.println("我:这是谁啊?");
// 多态创建对象  ,父类引用指向子类对象 
Person p = new IronMan();  
System.out.println("他:我啊,"+ p.name);  // 左边

System.out.println("我:你干嘛呢?");
p.getMoney();  // 右边,子类
//变身 向下转型 
IronMan im = (IronMan)p;
// p.fly();
// p.save();
im.fly();
im.save();
im.getMoney();
}
}
// 钢铁侠是人类的一种形态 
 //定义 人
class Person{
//姓名
String name = "托尼.斯塔克";
//挣钱的方法
public void getMoney(){  
System.out.println("开厂子挣钱");
}
}
//定义钢铁侠类 
class IronMan extends Person{
//姓名
String name = "钢铁侠";
//挣钱的方法
public void getMoney(){  
System.out.println("合影5块挣钱");
}
//fly
public void fly(){  
System.out.println("飞.............");
}
//救人
public void save(){  
System.out.println("救人,男人不救.........");
}
}

2.接口:

类与类,类与接口的关系:

类与类 --继承 
单继承,多层继承 
类与接口
实现关系,多实现
接口与接口 
继承,多继承 
接口是可以多实现的,但是类是不能多继承. 

综合案例:

A:案例分析
教练和运动员案例 (学生分析然后讲解)
乒乓球运动员(篮球运动员)
乒乓球教练(篮球教练)
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。






分析:


具体类: 四个 
乒乓球运动员(篮球运动员)
乒乓球教练(篮球教练)


抽象类: 运动员类 ,教练类 ,人类 


接口: 学英语
interface Study{
//学英语 
learnEng();
learnShow();
}


Person {
姓名
年龄


//特有方法
}


abstract 运动员类 {
姓名
年龄


abstract play();


}
abstract 教练类 {
姓名
年龄


abstract teach();


}






乒乓球运动员{
姓名
年龄


play(){
syso("乒乓球");
}
}


篮球运动员{
姓名
年龄


play(){
syso("篮球");
}

}




多态: 
1.要么继承(类与类)/要么实现(类与接口)
2.方法重写(不是必须,但是你不重写,没有意义)
3.父类引用指向子类对象(必须)



*/


class  PlayerTest{


public static void main(String[] args){


System.out.println();


//创建乒乓球运动员 


PPQPlayer ppq = new PPQPlayer("张继科",30);


ppq.eat("榨菜 ");// 继承 person
ppq.play();  // 继承 Player
ppq.learnEng();


Study s = new PPQPlayer();   //接口的多态 
s.learnEng();
}
}


//定义接口 


interface Study{


//学英语
public abstract void learnEng();
}


//定义抽象 人类 


abstract class Person{
String name ;//姓名 
int age;//年龄 


Person(){}


Person(String name ,int age){
this.name = name;
this.age =age;
}


//get /set 
public abstract void eat(String food);


}


//定义抽象 运动员类 


abstract class Player extends Person{
Player(){}


Player(String name ,int age){
super(name,age);
}

public abstract void play();
}


//定义抽象 教练类 


abstract class Coach extends Person{
Coach(){}


Coach(String name ,int age){
super(name,age);
}

public abstract void teach();
}


//定义 乒乓球 运动员 


class PPQPlayer extends Player implements Study{


PPQPlayer(){}


PPQPlayer(String name ,int age){
super(name,age);
}

public  void eat(String food){
System.out.println(food+" 就馒头");
}

public  void play(){
System.out.println("打乒乓球,我们是冠军");
}


public void learnEng(){
System.out.println("学好英语, 有好处...");
}


}


//定义 篮球运动员 


class LQPlayer extends Player{


LQPlayer(){}


LQPlayer(String name ,int age){
super(name,age);
}

public  void eat(String food){
System.out.println(food+" 就煎饼");
}
public  void play(){
System.out.println("打篮球,还得努力.......");
}
}


//乒乓球教练 


class PPQCoach extends Coach implements Study{


PPQCoach(){}


PPQCoach(String name ,int age){
super(name,age);
}

public  void eat(String food){
System.out.println(food+" 就馅饼");
}

public  void teach(){
System.out.println("教乒乓球,怎么打........");
}


//重写接口中 方法


public void learnEng(){
System.out.println("学好英语, 有好处...");
}
}


//篮球教练
class LQCoach extends Coach{


LQCoach(){}


LQCoach(String name ,int age){
super(name,age);
}
public  void eat(String food){
System.out.println(food+" 就肉夹馍");
}


public  void teach(){
System.out.println("教篮球,怎么打........");
}
}

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值