* 【多态】
* 5、多态的应用
*
* 基础班学生:
* 学习、睡觉
* 高级班学生:
* 学习、睡觉
*
* 可以将这两类事物进行抽取。
*
* 把事物不断抽象,找出的共性
*
* 对类型进行抽取,导致多态的产生,操作同一个大类型,对大类型中所有的小类型都能进行操作
* 就因为这个思想,才提高了扩展性的思想
*
*/
abstract class Stu{
public abstract void study();
public void sleep(){
System.out.println(" tang sleep");
}
}
class BaseStu extends Stu{
public void study(){
System.out.println(" base");
}
public void sleep(){
System.out.println(" base sleep");
}
}
class advStu extends Stu{
public void study(){
System.out.println(" adv");
}
public void sleep(){
System.out.println(" adv sleep");
}
}
class DoStu{
public void doSome(Stu stu){
stu.study();
stu.sleep();
}
}
public class Demo_Duotai3 {
public static void main(String []args){
DoStu ds=new DoStu();
ds.doSome(new BaseStu());
ds.doSome(new advStu());
}
}
---------------------------------------------------------------------------------------------------------------------------
/*【多态】【有状态的时候返回看看第8天第4个视频。】
* 6、多态出现在代码中的特点(多态使用的注意事项)
*/
class Fu1{
void method1(){
System.out.println("FU-1");
}
void method2(){
System.out.println("FU-2");
}
}
class Zi1 extends Fu1{
void method1(){
System.out.println("-1");
}
void method3(){
System.out.println("-3");
}
}
public class Demo_Duotai4 {
public static void main(String []args){
Fu1 f=new Zi1();
f.method1();
f.method2();
//f.method3(); 子类特有的方法,所以编译失败。f所属类型Fu1中没有3这个方法
/*
* 在多态【非静态】成员函数的特点
* 在编译时期,参阅引用类型变量所属的类型中是否有调用方法
* 如果有便通过,没有则编译失败
* 在运行时期,参阅对象所属的类中是否有调用方法。
*
* 【简单一点】就是:成员函数在多态调用时,编译看左边,运行看右边。
*
* 非静态有重写的特性
* 上面很常见。
* 下面两种情况很少见。
* 设计到面试的环节:
* 在多态中,成员变量的特点,无论编译和运行,都参考左边(引用性变量所属的类 )。
*
* 在多态中,静态函数的特点,无论编译和运行都看左边。
在简单一点来说就是,非静态,左编右运,静态是编运看左
*
*/
/*
Zi1 z=new Zi1();
z.method1();
z.method2();
z.method3();
*/
}
}
【应用】
/*
* 多态小应用
* 需求:
* 电脑运行示例
* 电脑运行基于主板。
*/
interface PCI{
public void open();
public void close();
}
class MainBoard{
public void run(){
System.out.println("MainBoard");
}
public void usePCI(PCI p){// PCI p=NetCard()//接口型引用指向自己的子类对象。
if(p!=null){
p.open();
p.close();
}
}
}
class NetCard implements PCI{
public void open(){
System.out.println("open");
}
public void close(){
System.out.println("close");
}
}
public class Demo_Duotai5 {
public static void main(String[] args) {
MainBoard mb=new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
}
}
黑马官网: http://edu.csdn.net/heima