JAVA 8 多态

面向对象的第三个特征,多态:

可以理解为事物存在的多种状态。

1,多态的体现:父类的引用指向了自己的子类,父类的引用可以接收子类对象。

Animal c1 = new Cat();

c1.eat();

function(new Dog());

function(new Pig());

public static void function (Animal c)

{

c.eat();

}

2,多态的前提

必须是类与类之间有关系,要么是继承,要么是实现。

通常还有前提,存在覆盖。

3,多态的应用

4,多态的好处

大大的提高了程序的扩展性

5,弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员。

例子程序:

class Zx

{

public static void main(String []arr)

{

Animal c1 = new Cat();

c1.eat();

function(new Dog());

function(new Pig());

}

public static void function (Animal c)

{

c.eat();

}

}

abstract class Animal

{

public abstract void eat();

}

class Cat extends Animal

{

public void eat()

{

System.out.println("吃鱼");

}

public void catchMouse()

{

System.out.println("抓老鼠");

}

}

class Dog extends Animal

{

public void eat()

{

System.out.println("骨头");

}

public void kanjia()

{

System.out.println("看见");

}

}

class Pig extends Animal

{

public void eat()

{

System.out.println("饲料");

}

public void gongDi()

{

System.out.println("公地");

}

}

修改之前的

class Zx

{

public static void main(String []arr)

{

Cat c = new Cat();

Cat c1 = new Cat();

function(c);

function(new Dog());

function(new Pig());

}

public static void function (Cat c)

{

c.eat();

}

public static void function (Dog c)

{

c.eat();

}

public static void function (Pig c)

{

c.eat();

}

}

abstract class Animal

{

public abstract void eat();

}

class Cat extends Animal

{

public void eat()

{

System.out.println("吃鱼");

}

public void catchMouse()

{

System.out.println("抓老鼠");

}

}

class Dog extends Animal

{

public void eat()

{

System.out.println("骨头");

}

public void kanjia()

{

System.out.println("看见");

}

}

class Pig extends Animal

{

public void eat()

{

System.out.println("饲料");

}

public void gongDi()

{

System.out.println("公地");

}

}

需求:

Animal a= new Cat();

a.eat();

想调用猫的特有方法,强制将父类的引用转成子类的类型,向下转型。

Cat c =(Cat) a;

c.catch.Mouse;

但是不可以

Animal a = new Animal();

Cat c = (Cat)a;

多态自始至终都是子类在变化。

关键字 instanceof:

判断 对象的引用是否指向某类型

Cat m = new Cat();

m instanceof Cat;   true

a  instanceof Dog; false

多态中成员函数(非静态)的特点:

在编译时期:参阅引用类型所属的类中是否有调用的方法,如果有,则编译通过,否则失败。

在运行时期:查阅对象所属的类中是否有调用的方法。

成员函数在多态调用是,编译看左边,运行看右边。

在多态中,成员变量(和静态方法)特点:

无论编译还是运行,成员变量都参考左边。

多态的应用举例:

class Zx

{

public static void main(String []arr)

{

MainBoard mb = new MainBoard();

mb.ran();

mb.usePCI(null);

mb.usePCI(new NetCard());

mb.usePCI(new MuCard());

}

}

class MainBoard

{

public void ran()

{

System.out.println("main board ran");

}

public void usePCI(PCI P)

/*接口型引用指向自己的子类对象,接口不可以创建对象,多态的应用之一,

提高了程序的扩展性,降低了耦合性*/

{

if(P!=null)

{

P.open();

P.close();

}

}

}

interface PCI

{

public void open();

public void close();

}

class NetCard implements PCI

{

public void open()

{

System.out.println("net open");

}

public void close()

{

System.out.println("net close");

}

}

class MuCard implements PCI

{

public void open()

{

System.out.println("mu open");

}

public void close()

{

System.out.println("mu close");

}

}

扩展性举例:

需求:数据库的操作

1,连接数据库

2,操作数据库

3,关闭数据库连接

下面写 UserInfoDao ui = new UserInfoByJDBC(); 即可

Object 类:

是所有对象的直接或者间接父类。

该类中定义的是所有所有对象都具备的功能。

class Demo //默认 extends Object

{

}

Object.squals(Object obj); //返回值为 true or false 当二者地址值相同为true

Object.toString();//返回该对象的字符表示   返回   “类名@地址值”地址值为16进制

Object.hanshCode //返回int   十进制的 地址值

时间: 2024-08-30 02:24:14

JAVA 8 多态的相关文章

Java中多态的一些简单理解

什么是多态 1.面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 2.多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 3.实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 4.多态的作用:消除类型之间的耦合关系. 5.现实中,关于多态的例子不

个人对Java中多态的一些简单理解

什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 多态的作用:消除类型之间的耦合关系. 现实中,关于多态的例子不胜枚举. 下面是多态

JAVA泛型多态

先度娘一下多态的概念: 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误: 如果有,再去调用子类的该同名方法. (来源:http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html) 那如果要在Java中泛型做多态如何使用

从虚拟机指令执行的角度分析JAVA中多态的实现原理

从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧,隐隐约约地记得是与Class文件格式中的方法表有关,但是不知道虚拟机在执行的时候,是如何选择正确的方法来执行的了.so,趁着周末,把压箱底的<深入理解Java虚拟机>拿出来,重新看了下第6.7.8章中的内容,梳理一下:从我们用开发工具(Intellij 或者Eclipse)写的 .java 源程

Java:多态乃幸福本源

01 多态是什么 在我刻板的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变:一个二郎神,也能七十二变:他们都可以变成不同的形态,但只需要悄悄地喊一声“变”. Java的多态是什么呢?其实就是一种能力——同一个行为具有不同的表现形式:换句话说就是,执行一段代码,Java在运行时能根据对象的不同产生不同的结果.和孙悟空和二郎神都只需要喊一声“变”,然后就变了,并且每次变得还不一样:一个道理. 多态的前提条件有三个: 子类继承父类 子类覆盖父类的方法

黑马程序员——Java基础---多态、内部类、异常、包

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.多态 多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的对象赋值给父类类型的引用. 猫这个对象对应的类

java进阶 - 多态

运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成"一个接口,多个方法".Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制. 方法的重写Overriding和重载Overloading是Java多态性的不同表现.重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overri

黑马程序员——java基础--多态

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 模板方法设计模式: 解决的办法:当功能内部一部分是现实确定,一部分是现实不确定的,这时间不可把不确定的部分暴漏出去,让子类实现. 实例:统计一个程序的的运行时间 思路:程序的结束时间减去程序的开始时间 abstract class Gettime{ public final void getTime(){//这段功能用final限制 long start = System.currentTim

Java(多态)动手动脑

1> 请看以下"变态"的类(参看示例ParentChildTest.java) 上述代码的特点是: 子类和父类定义了一模一样的字段和方法 运行以下测试代码 1. 上边的程序运行结果是什么? 2. 你如何解释会得到这样的输出? 第一个100:是parent调用PrintValue方法输出parent类中myValue值为100: 第二个200:是child调用PrintValue方法输出child类中myValue值为200: 第三个200:是parent = child,将子类对

Java有关多态类的小程序

1.使用instanceof运算符判断一个对象是否可以转换为指定的类型: 代码: public class TestInstanceof { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 //但hello变量的实际类型是String Object hello = "Hello"; //String是Object类的子类,所以返回true. Sys