JAVA——多态和抽象

多态和抽象从继承引出来的两个重要的概念,多态允许以多种形式存在,而抽象则允许创建抽象类。

在Java中,多态有两种理解方式:第一种是对象的不同的方法可以用相同的一个方法名,也就是重载的概念。另一种是同一对象根据不同的消息执行相应的行为,也可以这样认为发送消息给某一对象,让对象自行选择哪种相应的行为。根据这两种方式,所以多态分为静态多态和动态多态:

■静态多态指的是程序在编译时,系统就能决定调用哪个方法,所以也称为编译时多态。在Java中,静态多态实现的方法就是方法重载,其调用规则是依据对象在定义时的类型相应地调用对应类中的重载方法。

■动态多态指在运行中系统才能动态确定方法所指的对象,所以也称为运行时多态。动态多态的实现方式是重写父类的同名成员方法,其调用规则是依据对象在实例化时而非定义时的类型,相应地调用对应类中的同名成员方法。也就是说,动态多态主要通过动态绑定和重写的机制来实现。

在Java中,使用动态绑定和重写机制来实现多态,首先要掌握如下三个基础技术概念:

■向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当做一个父类类型。

■instanceof关键字:instanceof关键字用于判断运行时对象的真正类型。

■动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性。

向上转型和向下转型

向上转型:从低精度向高精度转换实行自动转换

向下转型:从高精度向低精度转换,用强制转换

对于引用数据类型

不可以和基本数据类型转换

引用数据类型必须是继承关系

父类的引用指向子类的对象,才可以通过

eg:Father fa = new Son();

Son son = (son) new Father();(不能通过)

eg:Father fa = new Son();

Son son = (son)fa;(通过)

(一个父类的引用变量可以指向不同的子类对象

或者说一个子对象可以被当做一个父类类型)

在Java中,如果我们不需要类的实例化时,就可以将类设计成为一个抽象类。所谓抽象类,是不能被实例化的类。在抽象类中,类的所有的其他功能都存在,成员变量、方法、构造器都可以用同样的方式访问,我们只是不能创建抽象类的实例。使用关键字abstract可以声明一个抽象类,该关键字可以出现在类声明时class关键字前的任何地方。

将一个方法声明为抽象方法有两个结果:①类也必须声明为抽象类。如果一个类包含了抽象方法,那么该类也必须是抽象类;②任何子类必须重写抽象方法,除非子类本身也是抽象的。

抽象方法没有方法体,一个包含抽象方法的类也必须声明为抽象类。抽象方法必须在抽象类的所有子类中被重写。

时间: 2024-11-08 00:57:27

JAVA——多态和抽象的相关文章

java学习笔记(八)多态与抽象

多态和抽象是从继承引出来的两个重要的概念,多态允许对象以多种形式存在,而抽象则允许创建抽象类. 多态是指一个对象有多种形式的能力.一个类的子类可以定义它们唯一的行为,同时共享父类的某些相同特征.动态多态指在运行中系统才能动态确定方法所指的对象. 多态的技术基础: 向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当做一个父类类型; instanceof关键字:用于判断运行时对象的真正类型; 动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而

多态与抽象以及接口

继承.封装.多态.抽象是面向对象编程的四大基本特征.封装隐藏了类的内部实现机制,在不影响用户使用的前提下,改变类的内部结构,从而保护了数据.继承则是通过重写父类代码,既可以多态,也可以让代码的复用性大大提高.所谓多态,就是同一种行为,不同的对象不同的体现,java的多态弥补了其自身单一继承的缺陷. 多态又分为,静态多态和动态多态. 静态多态是指程序在编译时就能决定其调用的方法,也称编译时多态,说的更直接静态多态实现方式就是方法的重载. 多态多态是指程序在运行中系统多态确定方法所指的对象,也称为运

继承、类的高级概念、多态和抽象、接口

private 只能在自己的类中访问得到. public 表 示共有的,在任何类中调到. protected 在所有类中 defult 在自己以及类中调用到. 本类 同一包中不同类 不同包 子类 piviate 是 是 是 是 public 是 是 是 protected 是 是 default 是 extends继承类 super . 类名(): 操类 子类中调用副类方法 public class salary extends Employee{ } 使用“is a ”判断继承是否正确 所有类

java 多态与多重继承

/** * java 中的每一中操作,操作的数据类型必须合法.父类有的方法子类都有 * 凡是能够使用父类生成对象的地方都可以使用子类生成对象. * * 多态性 * 是指允许不同类的对象对同一消息作出响应. * 多态性包括参数化多态性和包含多态性.多态性语言具有灵活. * 抽象.行为共享.代码共享的优势,很好的解决了应用程序函数同名问题. * 多态有两种表现形式:重载和覆盖 * 首先说重载(overload),是发生在同一类中.与什么父类子类.继承毫无关系. * 标识一个函数除了函数名外,还有函数

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

Java多态小总结

多态,又可以称为动态绑定,即在运行时确定类型,比如: 1 class A { 2 void draw(){ 3 //输出“A” 4 } 5 } 6 class B { 7 void draw(){ 8 //输出“B” 9 } 10 11 } 这种关系里,如果调用A a = new B(); 此时,被称为向上转型,a的类型可能在很早之前被生命,而在这时候被明确指明是其子类型, 我们如果要去调用draw()方法的时候,会调用输出“B”,这样,便是Java中的“多态”.我们称其为“向上转型”. 但是,

JAVA多态示例

这多态,我觉得是最利害的.在开发大型程序中. 但,也是需要经过足够多的实践经验才能随心利用的. class Quadrangle{ private Quadrangle[] qtest = new Quadrangle[6]; private int nextIndex = 0; public void draw(Quadrangle q){ if(nextIndex < qtest.length){ qtest[nextIndex] = q; System.out.println(nextIn

java多态讲解

JAVA多态 一.相关的类结构 class A ...{ //create by danielinbiti public String show(D obj)...{ return ("A and D"); } public String show(A obj)...{ return ("A and A"); } } class B extends A...{ public String show(B obj)...{ return ("B and B&q

Java多态特性:重载和覆写的比较

Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void main(String args[]){ int one = add(10,20) ; // 调用整型的加法操作 float two = add(10.3f,13.3f) ; // 调用浮点数的加法操作 int three = add(10,20,30) ; // 调用有三个参数的加法操作 Syst