Java-面向对象(高级篇)--对象的多态性

合集下载

第四章 面向对象

第四章 面向对象

小结1

类->对象->方法->重载 类:把食物的数据与相关的功能封装在一起,形成一种特殊的结构, 用以表达现实世界的抽象概念。 Java语言把数据成员称为“成员变量”,把函数成员称为“成员 方法”,成员方法简称为“方法”。 由类所创建的对象称为“实例”。 创建某个类的对象:1.声明指向由类所创建的对象的变量2.用new 运算符创建新的对象,并用变量指向该对象 对象名.成员变量名;对象名.方法名(); 当一个对象被创建之后,在调用该对象的方法时,不定义对象的引 用变量,而直接调用这个对象的方法,这样的对象叫做匿名对象。 封装:把变量和方法包装在一个类内,以限定成员的访问,从而达 到保护数据的一种技术。
4)实现类的封装 为了实现良好的封装性,通常将类的成员变量声明为 private,再通过 public 的方法来实现对这个变量进行访问。对一个变量的操作,一般都有 读取和赋值操作,分别定义两个方法来实现这两种操作,一个是getXxx() (Xxx表示要访问的成员变量的名字),用来读取这个成员变量,另外一个 是setXxx(),用来对这个成员变量赋值。 例子:TestPerson1.java(修改)
第四章 面向对象
类是Java语言面向对象编程的基本元素,它定义了一 个对象的结构和功能。 Java类中包含成员变量和成员方 法。成员变量有两种,用static 关键字修饰的变量为类变 量,无static 修饰的变量为实例变量。相应地,成员方法 也有两种,用static 修饰的为类方法,无static修饰的为 实例方法。实例方法不仅可以对当前对象的实例变量进行 操作,也可以对类变量进行操作;但类方法只能访问类变 量。实例变量和实例方法必须由实例对象来调用,而类变 量和类方法不仅可由实例对象来调用,还可由类名直接调 用。 Java 通过在类定义的大括号里声明变量来把数据封 装在一个类里,这里的变量称为成员变量。 封装性、继承性和多态性是java语言中面向对象的三 个特性。

马士兵java基础笔记 pdf版 面向对象部分

马士兵java基础笔记 pdf版 面向对象部分

public class Test{ public static void main(String args[]){ Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000)(1); test.change1(date)(4); test.change2(d1);(7) test.change3(d2);
b.setDay(22),把 b 指向的值改变了,这次真 的变了!
方法执行完后,b 消失,d2 的值变了。
四. 方法重载 类中可以定义相同名字但参数不同的方法。
五. this 关键字 this 指向对象自身的引用。
在类的方法定义中使用 this 关键字代表使用该方法的对象的引用。 当必须指出当前使用方法的对象是谁时要使用 this 有时使用 this 可以处理方法中成员变量和参数重名的情况 this 可以看作是一个变量,它的值是当前对象的引用
_id:1
age = _age; }
_age:25
public static void main(String[] args) {
Person tom = new Person(1, 25); } }
tom:XXX Stack
id:1 age:25
Heap
例子:
class BirthDate { private int day; private int month; private int year; public BirthDate(int d, int m, int y) { //构造方法 day = d; month = m; year = y; }

面向对象的三大特性(封装-继承-多态)

面向对象的三大特性(封装-继承-多态)

一丶封装1 权限修饰符可以用来修饰成员变量和成员方法,对于类的权限修饰只可以用public和缺省default。

被public修饰的类可以在任意地方被访问;default类只可以被同一个包内部的类访问。

权限由大到小:public protected default(不写) private被private修饰的成员只能在本类中访问,外界不能访问2 set()/get()方法(1)this关键字a.可以用来调用变量,方法,构造方法;b.this.xx 理解为调用当前类的xx。

(2)成员变量和局部变量1)在类中的位置不同a:成员变量:在类中,方法外b:局部变量:在方法声明上(形式参数),或者是在方法定义中2)在内存中的位置不同a:成员变量:在堆内存b:局部变量:在栈内存3)生命周期不同a:成员变量:随着对象的创建而存在,随着对象的消失而消失b:局部变量:随着方法调用而存在,随着方法的调用结束而消失4)初始化值不同a:成员变量:有默认值b:局部变量:必须初始化值,否则报错!(在使用它之前,没有初始化) (3)set()/get()方法当成员变量被private修饰时,不在本类中无法直接访问,便需要set()/get()方法来解决这个问题3 封装性封装:是面向对象的第一大特性,所谓封装,就是值对外部不可见(一般而言被private修饰),外部只能通过对象提供的接口(如set()/get()方法)来访问。

封装的好处:a.良好的封装能够减少耦合;b.类内部的结构可以自己修改,对外部影响不大;c.可以对成员进行更精准的控制(防止出现与事实不符的情况);d.影藏实现细节。

注意:在开发中,类的成员变量全部要进行封装,封装之后通过set()/get()方法访问。

二丶继承extends1 实现:通过 class Zi extends Fu{} 实现类的继承(1)子类继承父类,父类中声明的属性,方法,子类都可以获取到;当父类中有私有的属性方法时,子类同样可以获取到,由于封装性的设计,使得子类不能直接调用访问。

java入门第四篇-面向对象的三个基本特征;

java入门第四篇-面向对象的三个基本特征;

java⼊门第四篇-⾯向对象的三个基本特征;⾯向对象的三个基本特征:封装,继承,多态; 封装:将属性私有化,不允许外部数据直接访问,并设置相应的⽅法对属性进⾏设置和读取,从⽽实现对属性访问的限制。

这种限制属性访问的操作叫做封装。

通俗理解就是将属性封在⼀定的范围内,只能在给定的条件内取值。

如下代码⽰例,可以实现对限制年龄的取值。

private int age;public void setAge(int age){if(age>0&&age<120){this.age=age;}else{System.out.println("年龄输⼊不合法");this.age=-1;}}public int getAge(){return this.age;} 继承:将多个类公⽤的属性和⽅法写在⽗类⾥,⼦类使⽤extends关键字继承⽗类,就可以使⽤⽗类⾮私有化的属性和⽅法。

public class ColorPrinter extends Printer{} 1.使⽤继承可以:1.提⾼代码的复⽤性,⼦类可以调⽤⽗类⾮私有的属性和⽅法,不⽤再次编写。

2.提⾼代码的维护性。

3.将类与类联系起来,是多态的前提。

2.⼦类需要访问⽗类成员,使⽤super关键字。

super.属性访问⽗类属性; super.⽅法访问⽗类⽅法。

如果⼦类中没有同名的属性和⽅法覆盖⽗类,则依然可以直接使⽤this.属性直接调⽤从⽗类中继承的⾮私有属性。

但是⼦类中如果重写了与⽗类同名的属性,this.属性访问的是本类属性。

super.属性访问的是⽗类属性(⾮私有)。

在⼦类构造中,如果使⽤super(属性名,属性名,属性名);表⽰调⽤⽗类的函数,⽽且super()函数必须在⼦类的第⼀⾏。

super关键字,⽆法访问⽗类的私有属性和私有⽅法。

public class Piano extends Instrument {public Piano() {super();}public Piano(String brand,int weight,String size) {super(brand,weight);}}3.⼦类可以访问⽗类的属性和⽅法的种类。

面向对象的方法有哪些

面向对象的方法有哪些

面向对象的方法有哪些面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将问题分解为对象,并通过对象之间的交互来解决问题。

在面向对象编程中,我们使用类(class)和对象(object)来组织和管理代码,从而实现代码的封装、继承和多态。

面向对象的方法有以下几种:1. 封装(Encapsulation):封装是面向对象编程的基本特征之一。

它指的是将相关的属性和行为(方法)组合在一起,形成一个对象。

封装可以隐藏对象的内部细节,只提供一些外部接口,从而提高代码的可维护性和重用性。

2. 继承(Inheritance):继承是面向对象编程的另一个重要特征。

它通过创建一个新的类(子类)来继承已有类(父类)的属性和方法。

子类可以继承父类的所有非私有成员,并且可以添加自己的成员。

继承可以实现代码的重用和扩展。

3. 多态(Polymorphism):多态是面向对象编程的核心概念之一。

它指的是同一个类的实例在不同的情况下表现出不同的行为。

多态的实现方式包括函数重载和函数重写。

多态可以提高代码的灵活性和可扩展性。

4. 抽象(Abstraction):抽象是将具体的事物抽象成一般性的概念或模板。

在面向对象编程中,抽象是通过接口(interface)和抽象类(abstract class)来实现的。

接口定义了一组方法的签名,抽象类则提供了部分或者完整的方法实现。

抽象可以帮助我们定义通用的行为,并且使得程序具有更高的可复用性。

5. 组合(Composition):组合是指通过将一个类的对象作为另一个类的成员来组合两个类的关系。

组合可以实现部分和整体之间的关系,从而提高代码的灵活性和可维护性。

6. 封装(Encapsulation):封装是将对象的属性和方法封装起来,以隐藏内部实现的细节。

通过封装,对象对外只暴露有限的接口,隐藏了实现的细节,并且可以添加必要的验证和保护机制,提高代码的可靠性和安全性。

重载和多态的区别

重载和多态的区别

重载和多态的区别多态性也是面向对象方法的一个重要特性.多态性是指在在程序中出现的"重名"现象,即在一个程序中相同的名字可以表示不同的实现.在JAVA中,多态性主要表现在如下两个方面:1方法重载.通常指在同一个类中,相同的方法名对应着不同的方法实现,但是方法的参数不同.2成员覆盖.通常指在不同类父类和子类中,允许有相同的变量名,但是数据类型不同;也允许有相同的方法名,但是对应的方法实现不同.在重载的情况下,同一类中具有相同的名字的方法.如何选择它的方法体呢?不能使用类名来区分,通常采用不同的方法形参表,区分重载要求形参在类型,个数和顺序的不同,在定义重载方法时,应在方法的形参的类型,个数和顺序有所不同,以便在选择时能够区别开来.在覆盖的情况下,同名的方法存在于不同的类中,在调用方法只要指明其方法所归属的类名就可以了.例如class Shape {void draw {}void erase {}}class Circle extends Shape {void draw {System.out.println"Circle.draw";}void erase {System.out.println"Circle.erase"; }}class Square extends Shape {void draw {System.out.println"Square.draw";}void erase {System.out.println"Square.erase";}}class Triangle extends Shape {void draw {System.out.println"Triangle.draw";}void erase {System.out.println"Triangle.erase";}}public class Test {public static Shape randShape {switchintMath.random * 3 {default:case 0: return new Circle;case 1: return new Square;case 2: return new Triangle;} }public static void mainString[] args {Shape[] s = new Shape[9];forint i = 0; i < s.length; i++ s[i] = randShape;forint i = 0; i < s.length; i++ s[i].draw;}}输出结果Triangle.drawCircle.drawTriangle.drawTriangle.drawTriangle.drawSquare.drawSquare.drawTriangle.drawCircle.drawTriangle.eraseCircle.eraseTriangle.eraseTriangle.eraseTriangle.eraseSquare.eraseSquare.eraseTriangle.eraseCircle.erasePress any key to continue...又一次执行Triangle.drawTriangle.drawCircle.drawCircle.drawCircle.drawTriangle.drawTriangle.drawSquare.drawCircle.drawTriangle.eraseTriangle.eraseCircle.eraseCircle.eraseCircle.eraseTriangle.eraseTriangle.eraseSquare.eraseCircle.erasePress any key to continue...两次执行结果不同的原因是其中的Math.random这个类导致的,math.random得到的数是0-1之间的随机数.写到这里,我突然想到了方法重载,那么它和多态,覆盖有什么区别呢?到GOOGLE是搜素了一下,不少.不过,最重要的一点区别是:通过方法重载进而实现对象的多态性.方法重载是指功能相同的多个方法使用同一个方法名.同名的多个方法的参数要有所不同,即在参数类型,参数个数和参数顺序上要有所区别,以便作为选择某个方法的根据.通常只有功能相同的方法进行重载才有意义.例如:计算两个数之和的重载方法定义如下:int addint i,int j{retrun i+j;}float addfloat i,float j{retrun i+j;}double adddouble i,double j{retrun i+j;}重载方法的选择通常是在编译时进行.系统根据不同的参数类型,个数或顺序,寻找最佳匹配方法.方法类型不参与匹配.下面是搜到的一些例子.public class Base{int a,b;public Baseint x,int y{a = x;b = y;}public int add{return a + b;}public void addint x,int y{int z;z = x + y;}}上面这段代码就是重载~~~他有三个特征1:方法名必须一样“add“。

面向对象程序设计(JAVA)课件

字符串比较
String类提供了比较两个字符串的方法,如 equals()和compareTo()。
3
字符串转换
String类还提供了将其他数据类型转换为字符串 的方法,如Integer.toString()和 Double.toString()。
ArrayList类
动态数组
ArrayList类是一个动态数组,可以根据需要自动增长 和缩小。
Java的主要特性
面向对象
平台无关
自动内存管理
多线程支持
Java是一种纯粹的面向对象 编程语言,支持类和对象的 概念,以及继承、多态等面
向对象特性。
Java通过字节码实现跨平台 运行,只要安装了Java运行 时环境(JRE)或Java开发工 具包(JDK),就可以在任何 支持Java的平台上运行Java
01
常用方法
HashMap类提供了用于插入、删除和 查找键值对的方法,如put()、remove() 和get()。
02
03
遍历与清空
HashMap类还提供了用于遍历和清空 容器的方法,如iterator()和clear()。
Date类
日期时间表示
Date类用于表示特定的 时间点,包括年、月、 日、时、分、秒等信息。
异常的处理方式
01
抛出异常
当程序出现异常时,会抛出异常对象,传递给调用者。
02
捕获异常
在代码中通过try-catch语句块来捕获和处理异常。当try块中的代码出
现异常时,控制流会立即跳转到相应的catch块中执行处理逻辑。
03
声明抛出异常ຫໍສະໝຸດ 在方法签名中通过throws关键字声明该方法可能会抛出的异常,要求

Java的面向对象编程思想

Java的面向对象编程思想Java是一门流行的编程语言,其被广泛应用于各种领域。

与其它编程语言相比,Java有其独特的面向对象编程思想。

面向对象编程强调的是程序的对象,而不是程序的函数或指令。

这种编程思想使得Java在软件开发中越发重要。

一、什么是面向对象编程思想?在Java编程中,面向对象编程思想是基础。

面向对象编程(OOP)是一种程序设计模式,其中程序看作是一系列对象,每个对象都可以接收数据、处理数据和传递数据。

OOP将数据和方法捆绑在一起,使得数据和方法能够共同操作,对象有助于降低软件的复杂性并强化代码的重用性。

二、Java的基础数据类型Java有两类数据类型:基本数据类型和引用数据类型。

基本数据类型代表的是单一值,例如布尔型、字符型、整型和浮点型。

引用数据类型代表的是对现实世界中的事物进行的抽象。

这些事物可以指对象、集合和数组等复杂的数据结构。

三、Java的面向对象编程实现Java编程中,作为程序员,首先要学会如何写类。

一个类表示了一个对象的行为和属性,同时还定义了该对象的方法。

例如,我们可以定义一个名为Person_class的类,其中包含属性name、age和gender。

我们还可以定义一个set_name()方法来设置该对象的name属性。

Java通过继承实现代码重用。

通过继承,子类可以从父类继承属性和方法。

这使得代码可重用性更高。

子类可以通过继承获得父类的方法,并且还可以添加新的方法和属性。

Java中,一个类只能继承一个父类,但是可以实现多个接口。

Java还支持多态。

Java中,多态指对象可以具有多种形式,可以是父类或子类的对象。

这使得代码可以更加灵活。

多态性可以通过向上转型、方法重载和方法覆盖来实现。

四、Java的封装封装是OOP的基本概念之一,它是指隐藏对象的内部细节,同时只提供公共API以供外部使用。

Java中的封装通常通过访问控制符来实现。

Java的访问控制符有public、private、protected和default。

第四章 面向对象(下)

信息学院通信与电子信息教研室
Java基础及应用开发
王亚平
总目录
第一章
第二章
第三章
第四章
第五章 第六章 第七章
Java入门 Java编程基础 面向对象(上) 面向对象(下) 多线程 图形用户界面GUI Java编程进阶
本章目标
类的继承 final关键字 抽象类 接口(interface) 对象的类型转换 面向对象的多态性 异常 包(package)
4.9 包

package语句及应用 package语句作为Java源文件的第一条语句。如果没有 package语句,则为缺省无名包。 import语句及应用 jdk中常用的包
– ng----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。 – java.awt----包含了构成抽象窗口工具集(abstract window toolkits) 的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 – java.applet----包含applet运行所需的一些类。 – ----包含执行与网络相关的操作的类。 – java.io----包含能提供多种输入/输出功能的类。 – java.util----包含一些实用工具类,如定义系统特性、使用与日期日历 相关的函数。
4.8 异常 Nhomakorabea异常定义了程序中遇到的非致命的错误, 而不是编译时的语 法错误,如程序要打开一个不存的文件、网络连接中断、 操作数越界、装载一个不存在的类等。 try,catch语句 throws关键字 自定义异常与throw关键字 如何对多个异常作出处理 也可以在一个方法中使用throw,try…catch语句来实现程 序的跳转 一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或 异常的子类。 如果父类扔出多个异常,那么重写(覆盖)方法必须扔出 那些异常的一个子集,也就是说不能扔出新的异常。

尚硅谷面试题

尚硅谷面试题尚硅谷是一家知名的IT培训机构,提供高质量的编程教育和就业服务。

作为一名学员或者准备面试的应聘者,了解尚硅谷的面试题目是非常重要的。

本文将为大家介绍几道尚硅谷的常见面试题,并且给出详细的解答和思路分析。

面试题一:谈谈Java中的多态性?思路分析:多态性是面向对象编程的重要特性之一,也是Java语言中常见的面试题目。

多态性通过继承和接口实现,实现了父类引用可以指向子类对象的特点。

在面试中,可以从多个角度来回答这个问题,包括多态的定义、实现方式、优点和应用场景等。

解答:多态性是指同一类型的变量,在不同的对象实例上表现出不同的行为。

在Java中,多态性通过继承和接口实现。

通过继承,我们可以定义一个父类,然后派生出多个子类,这些子类都拥有父类的属性和方法。

通过接口,我们可以定义一组规范,然后多个类实现这个接口,根据实现类的不同,调用相同的接口方法会得到不同的结果。

多态性的主要优点是增加代码的灵活性和可扩展性。

通过使用父类引用指向不同的子类对象,我们可以在运行时动态地选择调用哪个子类的方法,从而实现了代码的灵活性。

另外,当需要添加新的子类时,我们只需要继承或者实现相同的父类或接口,而不需要修改原有的代码,从而实现了代码的可扩展性。

多态性适用于很多场景,比如通过一个统一的接口来操作不同的实现类,实现代码的解耦和通用性;通过将子类对象当作父类对象使用,提高代码的灵活性和可维护性等。

但是需要注意,在进行多态操作时,需要保证父类引用指向的对象是其子类对象,否则会出现类型转换异常。

面试题二:谈谈Java中的异常处理机制?思路分析:异常处理是Java编程的重要部分,良好的异常处理能够提高程序的健壮性和容错性。

在面试中,可以从异常的概念和分类、处理方法、异常处理的最佳实践等方面来回答这个问题。

解答:在Java中,异常是指程序在运行时遇到的意外事件或错误条件。

异常分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以上程序就是一个对象向上转型的关系,从程序的运算结果中可以发现,此时虽然使用父类对象调用fun1()方法,但是实际上调用的方法是被子类覆写过的方法,也就是说,如果对象发生了向上转型关系后,所调用的方法一定是被子类覆写过的方法。但是在此时一定要注意,此时的对象a是无法调用B类中的fun3()方法的,因为此方法只在子类中定义而没有在父类中定义,如果要想调用子类中的自己定义的方法,则肯定要使用子类实例,所以此时可以将对象进行向下转型。
this.fun1();
}
}
class B extends A
{
//覆写A中的方法
public void fun1(){
System.out.println("B-->public void fun()1");
}
//子类中自己定义的方法
public void fun3(){
System.out.println("B-->oublic void fun3()");
fun(new C());//传递C类实例,产生向上转型
}
public static void fun(A a){//接收父类对象
a.fun1();
}
}
运行结果:
B-->public void fun1()
C-->public void fun1()
从上程序运行的结果发现,此时由于在fun()方法中使用了对象的多态性,所以可以接收任何的子类对象,这样无论子类如何增加,fun()方法都不用做任何的改变,因为一旦发生对象的向上转型关系之后,调用的方法一定是被子类覆写过的方法。
A a=new B();//发生了向上转型关系,子类--》父类
B b=(B)a;//此时发生了向下转型关系
b.fun1();//调用方法被覆写的方法
b.fun2();//调用父类的方法
b.fun3();//调用子类定义的方法
}
}
运行结果:
B-->public void fun()1
B-->public void fun()1
}
public void fun5(){
System.out.println("C-->public void fun3()");
}
}
public class PolDemo04
{
public static void main(String[] args){
fun(new B());//传递B类实例
}
//子类中自己定义的方法
public void fun3(){
System.out.println("B-->poublic void fun3()");
}
}
class C extends A
{
public void fun1(){
System.out.println("C-->public void fun1()");
以上程序虽然实现了基本的要求,但是应该可以发现:如果按照以上的方式完成程序,则当产生一个A类的子类对象时,fun()方法就要被重载一次,则每一次扩充子类都必须修改类本身,这样肯定不方便,那么如果使用对象多态性完成可以很好地解决。
【使用对象的多态性】
class A
{
public void fun1(){
{
public void fun1(){
System.out.println("A-->public void fun1()");
}
public void fun2(){
this.fun1();
}
}
class B extends A
{
//覆写A中的方法
public void fun1(){
System.out.println("B-->public void fun1()");
System.out.println("B-->public void fun()1");
}
//子类中自己定义的方法
public void fun3(){
System.out.println("B-->oublic void fun3()");
}
}
public class PolDemo01
{
public static void main(String[] args){
对象向上转型:父类父类对象=子类实例;
对象向下转型:子类子类对象=(子类)父类对象;
下面进行对象向上转型的操作:
【对象向上转型】
class A
{
public void fun1(){
System.out.println("A-->public void fun1()");
}
public void fun2(){
}
//子类中自己定义的方法
public void fun3(){
System.out.println("B-->poublic void fun3()");
}
}
class C extends A
{
public void fun1(){
System.out.println("C-->public void fun1()");
}
public void fun5(){
System.out.println("C-->public void fun3()");
}
}
public class PolDemo04
{
public static void main(String[] args){
fun(new B());//传递B类实例,产生向上转型
对象的多态性
对象多态性在面向对象中是一个最重要的概念,在Java中主要有两种体现形式:
1.方法的重载和覆写
2.对象的多态性
对于方法的重载和覆写在之前的讲解中,下面将重点介绍对象的的多态性。
对象的多态性主要分为以下两种类型:
(1)向上转型:子类对象—》父类对象;
(2)向下转型:父类对象—》子类对象;
对于向上转型,程序会自动完成,而对于向下转型时,必须明确的指明要转型的子类类型,格式如下:
B-->oublic void fun3()
从以上程序中可以发现,如果要想调用子类自己的方法,则一定只能用子类的实例化对象,另外,在子类对象里调用从父类中继承过来的fun2()方法,fun2()方法要调用fun1()方法,由于此时fun1()方法已经被子类所覆写,所以此时调用的方法是被子类覆写过的方法。
fun(new C());//传递C类实例
}
public static void fun(B b){//接收B类实例
b.fun1();
}
public static void fun(C c){//接收C类实例
c.fun1();
}
}
运行结果:
B-->public void fun1()
C-->public void fun1()
对象向下转型的要求:
在对象向下转型前,必须首先发生对象向上转型,否则将出现对象转化异常。
了解了对象的多态性后,那么这个概念到底有什么用途哪?下面要求设计一个方法,要求此方法可以接收A类的任意子类对象,并调用方法,此时,如果不用对象的多态性,则肯定会使用以下形式的代码:
【不使用对象多态性实现功能】
class A
System.out.println("A-->public void fun1()");
}
public void fun2(){
this.fun1();
}
}
class B extends A
{
//覆写A中的方法
public void fun1(){
System.out.println("B-->public void fun1()");
}
}
public class PolDemo01
{
public static void main(String[] args){
B b=new B();//定义子类实例化对象
A a=b;//发生了向上转型的关系,子类--》父类
a.fun1();//此方法被子类覆盖
}
}
程序运行结果:Biblioteka B-->public void fun()1
【对象向下转型】
class A
{
public void fun1(){
System.out.println("A-->public void fun1()");
}
public void fun2(){
this.fun1();
}
}
class B extends A
{
//覆写A中的方法
public void fun1(){
相关文档
最新文档