提出问题:
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多态是面向对象编程中的一个核心特性,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要通过继承、接口和方法重写(Override)来实现。这里我们将深入探讨从虚拟机(JVM)的角度来看,Java...
Java编程语言以其面向对象特性,包括接口、继承、多态性等核心概念,为开发者提供了强大的设计和实现能力。在本实例中,我们将探讨这些关键概念,并通过具体代码示例来展示它们的实际应用。 首先,**接口...
在深入探讨Java继承与多态的综合练习之前,我们首先需要明确Java中继承和多态的基本概念和重要性。Java是一种面向对象的编程语言,其核心特性之一就是对象的继承性。继承允许新创建的类(子类)继承父类的属性和方法...
**Java实验报告(2)-多态和继承** 在Java编程语言中,多态和继承是面向对象设计的核心概念,它们极大地增强了代码的灵活性、可重用性和可扩展性。本实验报告将深入探讨这两个关键特性,并通过具体的实例来演示它们...
Java多态是面向对象编程中的一个核心概念,它允许我们使用父类的引用指向子类的对象,从而实现更灵活的代码编写。在这个“java多态实验”中,我们可以看到一系列小代码实例,这些实例旨在帮助理解和应用多态特性。...
本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...
在Java编程语言中,继承和多态是面向对象编程(OOP)的两个核心概念。接口则是实现多态的重要机制之一。学习Java继承和多态,特别是通过接口来实现,对于深入理解Java语言和面向对象设计模式至关重要。 继承...
在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...
总结来说,这个实验深入地探讨了Java中的继承和多态特性,通过一个实际的工资管理系统案例,展示了如何在实际编程中应用面向对象编程的基本原则。它帮助学习者理解如何定义类、创建对象、使用继承来构建类的层次结构...
在深入探讨Java中多态的内存分析之前,我们需要先理解一些基本概念。 首先,了解Java内存模型至关重要。Java程序运行时主要涉及四种内存区域:程序计数器、虚拟机栈、本地方法栈、堆和方法区(在Java 8及以后版本中...
在本文档中,我们将深入探讨如何在Java中通过接口实现继承和多态。 接口在Java中是指一组方法签名的集合,它定义了实现该接口的类所需要遵守的一系列方法规范。通过实现接口,一个类可以在其继承体系之外提供额外的...
Java程序设计中的继承、多态、重载与接口是面向对象编程的重要概念,它们构成了Java类体系的基础。让我们深入探讨一下这些主题。 1. **继承(Inheritance)** 继承是Java中一个核心特性,它允许一个类(子类)继承...
本文将深入探讨类继承的实现、作用以及相关的Java特性。 1. 类继承的实现和作用: 类继承通过使用关键字`extends`来实现。例如,`class ChildClass extends ParentClass`表明ChildClass是ParentClass的子类。继承...
接着探讨了接口变量的特性和接口多继承的优势。最后解释了接口如何支持多态性的具体案例。 适合人群:适用于具有一定编程经验的Java开发者,特别是对面向对象的基本特性感兴趣的初学者。 使用场景及目标:①理解接口...
Java多态实现是面向对象编程中的一个核心概念,它允许我们使用父类的引用变量来指向子类的对象,从而在运行时决定所调用的方法。这一特性极大地增强了代码的灵活性和扩展性,使得代码能够更好地应对未来的需求变化。...