您的位置:首页 > 职场人生

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

2015-09-25 14:01 801 查看
------- <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:案例分析
教练和运动员案例 (学生分析然后讲解)
乒乓球运动员(篮球运动员)
乒乓球教练(篮球教练)
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。

分析:

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

4000
乒乓球教练(篮球教练)

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

接口: 学英语
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>、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: