`
ahuter9
  • 浏览: 2529 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java多态-继承相关问题的探讨

 
阅读更多

提出问题:

Demo1

public class CSDN {
	public static void main(String[] args) {
		System.out.println("==================父类引用子类=================");
		Super sup=new Sub();
		System.out.println("count:"+sup.count);
		sup.print();
		System.out.println("==================子类引用子类=================");
		Sub sub=new Sub();
		System.out.println("count:"+sub.count);
		sub.print();		
	}
}
class Super{
	public int count=0;
	public void print(){
		System.out.println("Super here!");
	}
}
class Sub extends Super{
	public int count =1;
	public void print(){
		System.out.println("Sub here!");
	}	
}

Demo1说明的是父类引用子类对象,这是java的向上转型特性,当父类引用子类对象时,如果父类的成员变量被子类覆盖,通过父类调用该变量,获取的是父类的成员变量。如果父类的成员方法被重写,通过父类调用的是子类的成员方法。

//out

==================父类引用子类=================
count:0
Sub here!
==================子类引用子类=================
count:1
Sub here!

Demo2

public class CSDN {
	public static void main(String[] args) {
		System.out.println("==================父类=================");
		Super.print();
		System.out.println("==================子类=================");
		Sub.print();		
	}
}
class Super{
	public static void print(){
		System.out.println("Super here!");
	}
}
class Sub extends Super{
    public static void print(){
		System.out.println("Sub here!");
	}	
}

Demo2说明是通过类名调用类方法。

//out

==================父类=================
Super here!
==================子类=================
Sub here!

Demo3

public class CSDN {
	public static void main(String[] args) {
		Super sup =new Sub();
		sup.addAll();
	}
}
class Super{
	public void add(){
		System.out.println("super add");		
	}
	public void addAll(){
		System.out.println("super addAll");
		add();		
	}
}
class Sub extends Super{
	public void add(){
		System.out.println("sub add");
	}
	public void addAll(){
		System.out.println("sub addAll");
		add();
	}
}

Demo3说明的是子类继承父类,并重写父类的add和addAll方法,addAll方法的实现调用了add方法。当通过父类引用子类对象,调用addAll方法时,其实调用了子类的addAll方法,由于子类中addAll方法调用了add方法,也就调用了子类的add方法。

//out

sub addAll
sub add

Demo4

public class CSDN {
	public static void main(String[] args) {
		Super sup =new Sub();
		sup.addAll();
	}
}
class Super{
	public void add(){
		System.out.println("super add");		
	}
	public void addAll(){
		System.out.println("super addAll");
		add();		
	}
}
class Sub extends Super{
	public void add(){
		System.out.println("sub add");
		super.add();
	}
	public void addAll(){
		System.out.println("sub addAll");
		super.addAll();
	}
}

Demo4说明的父类引用子类对象,同Demo3相同的是存在add和addAll方法,不同的是在子类中的addAll方法,指定调用了父类的addAll方法。那么,父类中的add方法会调用哪一个add方法呢。实验证明,调用了子类的add方法。这是由于java的动态方法调用的特性,成员方法的调用是在运行时决定的。当子类重写了父类的成员方法时,编译器会选择重写后的方法调用,也可以通过在子类中指定super调用父类方法。

//out

sub addAll
super addAll
sub add
super add

分享到:
评论

相关推荐

    从虚拟机角度看Java多态->(重写override)的实现原理

    Java多态是面向对象编程中的一个核心特性,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要通过继承、接口和方法重写(Override)来实现。这里我们将深入探讨从虚拟机(JVM)的角度来看,Java...

    java 接口 类 继承 多态的简单实例

    Java编程语言以其面向对象特性,包括接口、继承、多态性等核心概念,为开发者提供了强大的设计和实现能力。在本实例中,我们将探讨这些关键概念,并通过具体代码示例来展示它们的实际应用。 首先,**接口...

    java实验报告(2)-多态和继承

    **Java实验报告(2)-多态和继承** 在Java编程语言中,多态和继承是面向对象设计的核心概念,它们极大地增强了代码的灵活性、可重用性和可扩展性。本实验报告将深入探讨这两个关键特性,并通过具体的实例来演示它们...

    java多态实验

    Java多态是面向对象编程中的一个核心概念,它允许我们使用父类的引用指向子类的对象,从而实现更灵活的代码编写。在这个“java多态实验”中,我们可以看到一系列小代码实例,这些实例旨在帮助理解和应用多态特性。...

    Java 多态中的类型转换

    本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...

    Java实验报告——类的继承、多态的应用

    在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...

    源代码+报告-Java的继承和多态编程

    总结来说,这个实验深入地探讨了Java中的继承和多态特性,通过一个实际的工资管理系统案例,展示了如何在实际编程中应用面向对象编程的基本原则。它帮助学习者理解如何定义类、创建对象、使用继承来构建类的层次结构...

    java中多态的内存分析

    在深入探讨Java中多态的内存分析之前,我们需要先理解一些基本概念。 首先,了解Java内存模型至关重要。Java程序运行时主要涉及四种内存区域:程序计数器、虚拟机栈、本地方法栈、堆和方法区(在Java 8及以后版本中...

    java程序设计-第5章-继承、多态、重载与接口

    Java程序设计中的继承、多态、重载与接口是面向对象编程的重要概念,它们构成了Java类体系的基础。让我们深入探讨一下这些主题。 1. **继承(Inheritance)** 继承是Java中一个核心特性,它允许一个类(子类)继承...

    Java--类的继承

    本文将深入探讨类继承的实现、作用以及相关的Java特性。 1. 类继承的实现和作用: 类继承通过使用关键字`extends`来实现。例如,`class ChildClass extends ParentClass`表明ChildClass是ParentClass的子类。继承...

    学习-java继承和多态之接口-Java程序设计中接口概念及其多态应用

    接着探讨了接口变量的特性和接口多继承的优势。最后解释了接口如何支持多态性的具体案例。 适合人群:适用于具有一定编程经验的Java开发者,特别是对面向对象的基本特性感兴趣的初学者。 使用场景及目标:①理解接口...

    Java多态实现

    Java多态实现是面向对象编程中的一个核心概念,它允许我们使用父类的引用变量来指向子类的对象,从而在运行时决定所调用的方法。这一特性极大地增强了代码的灵活性和扩展性,使得代码能够更好地应对未来的需求变化。...

    java继承、多态的简单程序.zip

    接下来,我们将深入探讨Java中的继承和多态性。 ### 继承(Inheritance) 在Java中,继承允许一个类(子类)获取另一个类(父类)的属性和方法,从而实现代码的复用。这是面向对象设计的关键原则之一,有助于创建...

    精通Java--JDK、数据库系统开发、Web开发基础与实例

    面向对象是Java的核心特性,本书将详细讲解面向对象软件设计方法,包括类与对象、封装、继承、多态等概念。通过实例解析,读者可以学会如何创建和使用类,理解类与对象的关系,以及如何利用继承和多态性来提高代码的...

    Java编程实训 Java开发基础入门教程1-06 面向对象编程-继承和多态(共28页).ppt

    在Java编程实训中,"面向对象编程-继承和多态"这部分内容主要探讨了如何通过继承来减少代码冗余,提高代码的可复用性,以及如何利用多态来实现更灵活的编程。 首先,代码封装是面向对象编程的基本原则,它将数据和...

    java 多态实例

    在这个实例中,我们将探讨如何通过接口(Interface)和抽象类(Abstract Class)实现多态,并结合两种不同的排序算法——快速排序(QuickSorting)和冒泡排序(BubbleSorting)来展示其实用性。 首先,`ComputeData...

    集合+接口+继承+多态。。

    在Java编程语言中,"集合+接口+继承+多态"是四个核心概念,它们构成了Java面向对象编程的基础。下面将分别对这四个概念进行详细解释,并探讨它们之间的相互关系。 1. **集合**: 集合是Java中用于存储多个对象的数据...

    多态继承接口结构例子

    在C#编程语言中,多态(Polymorphism)、继承(Inheritance)和接口(Interface)是面向对象编程的三大核心特性。结构(Struct)则是C#中的一个基本类型,与类(Class)有所不同。本篇文章将深入探讨这些概念,并...

    java多态的实现

    本文将深入探讨Java中的多态实现,其特征以及在实际编程中应注意的事项。 首先,多态的实现主要基于以下两个机制: 1. 继承(Inheritance):子类继承父类,可以获得父类的属性和方法。这为多态提供了基础,因为...

    Java继承与多态的全面解析及其综合应用

    还探讨了Java多态的特点,如方法重载与重写、向上转型与向下转型的应用,以及在设计模式中的具体实践。文中提供了大量的案例与代码示例,帮助读者加深理解。 适合人群:Java初学者及有一定经验的开发者。 使用场景及...

Global site tag (gtag.js) - Google Analytics