----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
多态:可以理解为事物存在的多种体现形态。
①多态的体现
父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。
②多态的前提
必须是类与类之间有关系。要么继承,要么实现。通常还有一个前提:存在覆盖。
③多态的好处
多态的出现大大的提高程序的扩展性。
④多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
abstract class Animal //定义抽象类Animal(动物)
{
abstract void eat(); //定义抽象方法eat()
}
class Cat extends Animal //定义Cat类继承Animal
{
public void eat() //重写猫吃的方法
{
System.out.println("吃鱼");
}
public void catchMouse() //定义猫的特有的catchMouse方法
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal //定义Dog类继承Animal类
{
public void eat() //重写Dog吃的方法
{
System.out.println("吃骨头");
}
public void kanJia() //定义Dog的特有的kanJia方法
{
System.out.println("看家");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
//Animal c = new Cat(); //类型提升。 向上转型。
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用。转成子类类型。向下转型。
///Cat c = (Cat)a;
//c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类应用指向了自己的子类对象时,该用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化。
function(new Cat());
function(new Dog());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
if(a instanceof Cat)
{
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog c = (Dog)a;
c.kanJia();
}
}
instanceof : 用于判断对象的类型。 对象 intanceof 类型(类类型 接口类型)
}
⑤多态的特点
a .在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
b .在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
c .在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
class Fu
{
static int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu
{
static int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
static void method4()
{
System.out.println("zi method_4");
}
}
class DuoTaiDemo4
{
public static void main(String[] args)
{
/* Fu f = new Zi();
f.method1();
a f.method2()
f.method3();
*/
/* Fu f = new Zi()
System.out.println(f.num);
b Zi z = new Zi();
System.out.println(z.num);
*/
Fu f = new Zi();
c System.out.println(f.num);
f.method4();
}
}
⑥示例:主板的运行
interface PCI //定义接口PCI (插槽)
{
public void open();
public void close();
}
class MainBoard //定义主板类
{
public void run()
{
System.out.println("mainboard run ");
}
public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子类对象。
{
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI //定义网卡来实现PCI插槽
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
method();
}
}
class SoundCard implements PCI //定义声卡实现PCI插槽
{
public void open()
{
System.out.println("SoundCard open");
}
public void close()
{
System.out.println("SoundCard close");
}
}
class DuoTaiDemo5
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
多态:可以理解为事物存在的多种体现形态。
①多态的体现
父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。
②多态的前提
必须是类与类之间有关系。要么继承,要么实现。通常还有一个前提:存在覆盖。
③多态的好处
多态的出现大大的提高程序的扩展性。
④多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
abstract class Animal //定义抽象类Animal(动物)
{
abstract void eat(); //定义抽象方法eat()
}
class Cat extends Animal //定义Cat类继承Animal
{
public void eat() //重写猫吃的方法
{
System.out.println("吃鱼");
}
public void catchMouse() //定义猫的特有的catchMouse方法
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal //定义Dog类继承Animal类
{
public void eat() //重写Dog吃的方法
{
System.out.println("吃骨头");
}
public void kanJia() //定义Dog的特有的kanJia方法
{
System.out.println("看家");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
//Animal c = new Cat(); //类型提升。 向上转型。
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用。转成子类类型。向下转型。
///Cat c = (Cat)a;
//c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类应用指向了自己的子类对象时,该用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化。
function(new Cat());
function(new Dog());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
if(a instanceof Cat)
{
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog c = (Dog)a;
c.kanJia();
}
}
instanceof : 用于判断对象的类型。 对象 intanceof 类型(类类型 接口类型)
}
⑤多态的特点
a .在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
b .在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
c .在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
class Fu
{
static int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu
{
static int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
static void method4()
{
System.out.println("zi method_4");
}
}
class DuoTaiDemo4
{
public static void main(String[] args)
{
/* Fu f = new Zi();
f.method1();
a f.method2()
f.method3();
*/
/* Fu f = new Zi()
System.out.println(f.num);
b Zi z = new Zi();
System.out.println(z.num);
*/
Fu f = new Zi();
c System.out.println(f.num);
f.method4();
}
}
⑥示例:主板的运行
interface PCI //定义接口PCI (插槽)
{
public void open();
public void close();
}
class MainBoard //定义主板类
{
public void run()
{
System.out.println("mainboard run ");
}
public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子类对象。
{
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI //定义网卡来实现PCI插槽
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
method();
}
}
class SoundCard implements PCI //定义声卡实现PCI插槽
{
public void open()
{
System.out.println("SoundCard open");
}
public void close()
{
System.out.println("SoundCard close");
}
}
class DuoTaiDemo5
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
发表评论
-
日志地址
2015-05-04 20:19 243iteye博客 qq空间 -
黑马程序员_正则表达式
2015-05-04 10:56 559[b][/b]----------- android培 ... -
黑马程序员_设计模式
2015-05-04 10:55 434----------- android培训、java培训、ja ... -
黑马程序员_IO
2015-05-04 10:53 367----------- android培训、jav ... -
黑马程序员_Map集合
2015-05-03 09:53 422----------- android培训、jav ... -
黑马程序员_Collection集合
2015-05-03 09:49 310----------- android培训、java培训、ja ... -
黑马程序员_异常
2015-05-03 09:38 305----------- android培训、java培训、ja ... -
黑马程序员_常用类库
2015-05-03 09:30 543----------- android培训、java培训、ja ... -
黑马程序员_网络编程
2015-05-03 09:56 482----------- android培训、jav ... -
黑马程序员_多线程
2015-05-02 20:28 351----------- android培训、java培训、ja ... -
黑马程序员_内部类
2015-05-02 20:24 396----------- android培训、java培训、ja ... -
黑马程序员_面向对象(二)
2015-05-02 20:18 320----------- android培训、jav ... -
黑马程序员_面向对象(一)
2015-05-02 17:55 440------------ android培训、ja ...
相关推荐
黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi
1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...
黑马程序员 - Java基础教学 - 05 - 面向对象(1).doc
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
传智播客_Java培训_毕向东_Java基础[03-面向对象]系黑马程序员_毕向东_Java基础视频教程
C++机房预约系统:面向对象,文件操作,黑马程序员,部分优化,模板
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
黑马程序员 - Java基础教学 - 06 - 面向对象(2) - 关于静态static的那些事.doc
1、面向对象都有哪些特性以及你对这些特性的理解12 1、 Java 中实现多态的机制是什么 1、 Java 中异常分为哪些种类13 2、 调用下面的方法,得到的
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 Java是SUN(Stanford University Network,斯坦福大学网络...是简单易学,完全面向对象,安全可靠,与平台无关的编程语言
在下载和比较了大量同类书籍后不得不承认孙卫琴老师的这本书循序渐进由浅入深是最好的Java入门教程,同时它的...本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。
C++面向对象——B站黑马程序员视频学习笔记。
(1)aop:面向切面编程,扩展功能不是修改源代码实现 (2)ioc:控制反转, - 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new...
linux编程,ppt文档,gdb,makefile,linux编程概述
精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 本书适合以下读者阅读 a....b....c....对面向对象开发感兴趣的人
第1章 Java开发入门一.填空题1. 面向对象,SUN 2. JavaSE,JavaEE,JavaME3.面向对象、跨平台性、支持多线程4. JDK5.bin
观看黑马程序员Java零基础视频教学,从60P方法开始总结的知识集合,请使用Xmind打开,如果需要学习请配合视频打开:https://www.bilibili.com/video/BV17F411T7Ao
《JavaScript前端开发案例教程》是面向计算机相关专业的一门Web前端基础课程,涉及JavaScript语言基础、数组、函数、对象、BOM、DOM、事件、正则表达式、Ajax、jQuery等内容。
由黑马程序员职工管理系统改编,内含5个头文件和5个源文件,可实现学生,老师,院长三级成员的增删改查操作。
Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。