`

多态:成员变量和成员方法的多态性

 
阅读更多

1、成员方法的多态性

public class Polymorphism{
	public static void main(String[] agrs){
		BasePolymorphism b = new SubPolymorphism();
		b.method1();
	}
}

class BasePolymorphism{
	public BasePolymorphism(){
		//注意:此处调用的将是子类的method2方法
		this.method2();
	}

	public void method1(){
		System.out.println("BasePolymorphism method1");
		//注意:此处调用的将是子类的method2方法
		this.method2();
		//因为父类的method3方法是私有的,在子类中不可见,所以子类无法覆盖该方法。
		//即使子类中定义了同名方法,也只能算是重新定义了一个方法,该方法也不具有多态性
		//注意:此处调用的是父类的method3方法
		this.method3();
	}
	
	//此方法会被子类的同名方法覆盖
	public void method2(){
		System.out.println("BasePolymorphism method2");
	}
	
	private void method3(){
		System.out.println("BasePolymorphism method3");
	}
}

class SubPolymorphism extends BasePolymorphism{
	//此方法会覆盖父类中的同名方法
	public void method2(){
		System.out.println("SubPolymorphism method2");
	}
	
	//虽然该方法与父类中的方法完全相同,但由于父类中的该方法是私有的,所以此处的方法无法覆盖父类中的同名方法
	//该方法只是子类新定义的一个方法
	public void method3(){
		System.out.println("SubPolymorphism method3");
	}
}
/*
运行结果:
SubPolymorphism method2
BasePolymorphism method1
SubPolymorphism method2
BasePolymorphism method3
*/

/*
分析:
如果子类中的某个方法覆盖父类中的同名方法,那么即使是在父类中调用该同名方法,被调用的方法也是子类中的同名方法、而不是父类中的同名方法。
因此如果要在父类中调用将要被子类重写的方法时,必须格外小心。

父类中的私有方法在子类中是不可见的,所以子类无法覆盖父类中的私有方法。
即使子类定义了和父类的私有方法完全相同的方法,也不会覆盖父类中对应的私有方法,仅仅是在子类中定义了一个新方法。
*/

 

 

2、成员变量的多态性

与成员方法不同,成员变量不具有多态性。通过引用变量来访问它包含的成员变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量。

分享到:
评论

相关推荐

    C++实验报告多态性.doc

    3. 动态多态性: - 通过虚函数实现:虽然实验中没有明确列出,但多态性的关键在于基类中声明虚函数,然后在派生类中重写这些虚函数。 - 使用抽象类:含有纯虚函数的类是抽象类,不能实例化,但可以作为基类,强制...

    成员的初始化顺序和多态性

    本实验将通过编写具体的Java代码来演示多态性的特性,特别是私有方法、静态方法和实例方法的多态性差异。 #### 实验步骤解析 ##### 步骤三:多态性实验 1. **私有方法和静态方法不是多态的**:这是因为在继承关系...

    多态性实验报告-实验七

    本实验是《面向对象程序设计》课程中的一个环节,旨在通过实践加深学生对多态性的理解和应用能力。多态性是面向对象编程的一个核心特性,它允许子类对象可以被当作父类对象来处理,从而实现代码的复用性和灵活性。 ...

    C类的成员变量和成员函数-C教程共3页.pdf.zip

    一个类可以继承另一个类的属性和行为,子类可以扩展或覆盖父类的方法,实现多态性。多态性允许不同类型的对象对同一消息做出不同的响应。 五、总结 了解和熟练掌握C类的成员变量和成员函数是成为C++程序员的基础。...

    Java 语言程序设计:第5章接口多态.ppt

    内部类是 Java 语言中的一种嵌套类,它可以访问外部类的成员变量和方法。内部类可以用来实现多态,例如,声明一个内部类 Shape2D,可以利用它来实现二维的几何形状类 Circle 和 Rectangle。 5.7 本章小结 本章主要...

    JAVA 继承和多态实验报告.pdf

    在本实验中,我们使用多态技术设计了三个子类Circle、Rectangle和Triangle,每个子类都有其特有的方法和成员变量,但是它们都继承了父类Shape的成员变量和方法。 访问控制 在Java中,访问控制是指对类成员变量和...

    c++多态性与虚函数练习题

    ### C++多态性与虚函数知识点解析 #### 一、多态性的概念 多态性是面向对象编程的一个...通过这些实验,你可以更深入地理解和掌握C++中的多态性、虚函数以及相关的高级特性。这些知识对于开发复杂的应用程序至关重要。

    实验四 多态性及综合应用

    1. **理解编译时的多态性和运行时的多态性**:通过本实验,学生将深入理解多态性的概念及其在C++中的两种表现形式——编译时多态性和运行时多态性。编译时多态性主要通过重载函数和运算符实现,而运行时多态性则依赖...

    Java设计一个银行帐户类(继承与多态)

    继承是多态的基础,多态性允许子类对象替换父类对象,且能够调用父类的公共方法,同时也可使用子类特有的方法。 实验中提到的“一个类只能继承一个父类”是Java单继承特性,但Java支持接口的多实现,可以模拟多重...

    java继承和多态PPT教案学习.pptx

    方法覆盖是Java实现多态性机制的另一种方式,即在类层次结构中,如果子类中的一个方法与父类中的方法有相同的返回类型、相同的方法名并具有相同数量和类型的参数列表。这意味着可以在子类中覆盖父类的方法,以提供...

    深入解析C#的多态性

    多态性是指允许变量、函数或对象采用多种类型的特性。在C#中,可以通过以下几种方式实现多态: - **编译时多态**:主要通过方法的重载(overloading)来实现。 - **运行时多态**:通常通过方法的重写(overriding)...

    c++ 图形面积计算 利用继承与多态

    - **多态性**是面向对象编程的关键特性之一,它允许基类的指针或引用操作不同的派生类对象。在这里,`Shape`类的指针可以指向`Circle`、`Triangle`或`Rectangle`对象,并调用`getArea()`方法,即使这些类的具体实现...

    面向对象2练习题.doc

    * 继承和多态:动作的多态性 4. 长方形类设计: * 属性:长、宽 * 方法:计算面积、计算周长、设置长和宽 知识点: * 面向对象编程基本概念:类、对象、属性、方法 * Java 语言基础:类的定义、构造方法、成员...

    @classmethod 多态总结1

    @classmethod 是 Python 中的一种特殊方法,它可以将类方法转换为静态方法,实现多态性。在 Python 中,classmethod 是一个函数装饰器,它可以将一个函数转换为类方法。classmethod 方法的第一个参数是类本身,而...

    多态的练习案例

    子类继承抽象类并实现其抽象方法,可以实现多态性。抽象类可以作为通用的基类,定义一套公共接口供子类使用。 5. **运行时多态**:在Java等动态绑定的语言中,多态的真正体现是在运行时。即使在编写代码时我们使用...

    Java相关知识的学习(关键字)(多态)

    5. 多态性:在Java中,多态是指一个父类引用可以指向它的子类对象,从而允许调用子类重写或继承的父类方法。多态分为编译时多态和运行时多态。编译时多态通过方法重载实现,运行时多态通过方法重写实现。 3. 多态...

    java多态性

    在Java中,多态性的一个重要体现是父类引用可以指向子类对象,这是因为子类继承了父类的所有成员变量和方法,从而可以使用父类的引用来访问子类的对象。但是,子类对象不能直接指向父类,需要使用强制转换来实现类型...

    黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc

    继承是指子类继承父类的所有成员变量和成员方法,而实现是指子类实现接口中的方法。在上面的示例代码中,我们使用了继承关系,例如`Cat`继承自`Animal`,`Dog`继承自`Animal`,`Pig`继承自`Animal`。 三、多态的...

Global site tag (gtag.js) - Google Analytics