对象替换原则:
父类的句柄能够指向父类的对象,也能够指向子类的对象。
例如:
public class A502
{
public static void main(String[] args)
{
Chinaman you = new Chinaman();
you.say();
Chinaman me = new Wuhanman();
me.say();
}
}
super与this:
关键字super指向父类对象;关键字this指向当前类对象本身。(它们是实例成员变量,不能用于静态方法之中)
1、在对象创建时使用super和this
1)如果父类的构造器重载了,通过super指定调用哪个父类构造器。
2)如果子类自己的构造器重载了,通过this在一个构造器里调用另一个构造器。
(super/this() 语句调用必须是构造器的第一个语句)
public class A
{
private String s = new String("null");
A()
{
System.out.print("A");
}
A(int a)
{
System.out.print("AAAAA");
}
A(String str)
{
this(2);
this.s = str;//若去掉,结果s为null
System.out.println(s);
}
public static void main(String[] args)
{
new A("Hello");
}
}
2、在变量的隐藏时使用super和this
1)子类的成员变量隐藏父类的成员变量
2)类的局部变量隐藏类的成员变量
(局部变量不能被隐藏)
例如:( 如果想访问父类被隐藏的成员变量i,用super.i表示。成员变量被局部变量所隐藏时,用this.i访问它。)
class F
{
int i = 100;
void isF(int i)
{
System.out.print("F"+i+"");
}
}
public class A extends F
{
int i = 10; //成员变量,隐藏了父类的成员变量i
void isA(int i) //形参变量,隐藏了自己的成员变量i
{
System.out.println("i is:"+i); //i=实际参数
System.out.println("i of A:"+this.i); //i=10
System.out.println("i of F:"+super.i); //i=100
}
public static void main(String[] args)
{
A a = new A();
int i = 1;
System.out.println(i+" ");
a.isA(i); //i=1
System.out.print(a.i+" "); //子类的对象调用成员变量
}
}
3、在消息传递中使用super和this(super主要用于方法改写中)
方法的继承与改写:
改写(overriding):在子类中对父类的方法进行重新定义,改写是继承性和多态性的核心机制。
1)子类不继承父类的private方法;如果子类与父类不在同一个包,则不继承父类的包访问级别的方法。
2)子类可以添加自己的新方法,但子类对象的引用赋值给父类句柄后,不能用父类句柄访问子类的新方法。
(构造方法不是类的成员,则父类的构造方法不能被子类继承)
注意改写与重载的区别。
方法改写要求:
1)返回值类型必须相同。
2)父类的方法不是final方法。
3)改写方法不要求与父类方法的访问修饰符相同,但不能改写的更加私有。若父类为private,改写方法可以用protected和pulic修饰;若父类为public,改写方法只能用public修饰。
4)改写方法不能产生比父类方法更多的异常。
(静态方法不能被改写,只能被隐藏。)
(private方法不被继承,static方法只能被隐藏,final方法禁止改写。)
例如:(可以通过类名和super访问父类被隐藏的类方法)
class F
{
static void fun()
{
System.out.println("F的类方法");
}
}
class S extends F
{
static void fun() //是隐藏
{
F.fun(); //类名访问被隐藏的类方法
System.out.println("Son 的类方法");
}
void inst() //实例方法
{
super.fun(); //只能用于实例方法中
System.out.println("Son的实例方法");
}
}
public class A
{
public static void main(String[] args)
{
F f = new S();
f.fun();
(new S()).fun();
(new S()).inst();
}
}
说明:父类的类方法只能被子类的类方法隐藏,不能用实例方法隐藏。父类的实例方法只能被子类的实例方法改写,不能用类方法去改写父类的实例方法。(类方法即static静态方法,实例方法即非static修饰的方法)
分享到:
相关推荐
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
java封装 继承与多态 程序设计 类与对象
### 详解Java接口、继承和多态 #### 一、Java接口 在Java中,接口是一种定义行为的方式,它提供了一种实现抽象方法的手段。通过接口,开发人员可以为类定义一组方法签名,但不提供这些方法的具体实现。这有助于...
Java程序设计:第8章 继承和多态.ppt
Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...
Java语言程序设计ppt第十一章(继承和多态) 本章节主要讲解Java语言中的继承和多态机制,包括继承的定义、继承的应用、多态性和动态绑定等知识点。 一、继承的定义 继承是一种机制,允许一个类继承另一个类的...
Java程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdf...
在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...
JAVA 封装继承与多态是面向对象程序设计语言中三个重要的概念,本文将对这三个概念进行详细的解释。 一、封装 封装是指隐藏对象的内部细节,使对象外部不能随意存取对象的内部数据的过程。JAVA 中,对象就是一个...
《西南科技大学Java程序设计与实践——实验三:类的继承与多态的应用》 本次实验主要目的是深化理解和应用Java中的类的继承与多态特性,同时结合图形用户界面设计进行实战训练。实验内容分为三个部分,旨在通过具体...
总结来说,Java的面向对象设计包括封装、继承和多态,这些特性使得代码更加模块化、可维护和可扩展。访问修饰符和方法修饰符提供了细粒度的控制,确保代码的质量和安全性。接口作为多态的重要工具,弥补了Java单一...
这个压缩包"java继承、多态的简单程序.zip"显然包含了一些示例代码,旨在帮助初学者理解这两个概念。接下来,我们将深入探讨Java中的继承和多态性。 ### 继承(Inheritance) 在Java中,继承允许一个类(子类)...
在第四章“继承与多态”中,我们深入探讨了这两个主题。 首先,继承允许一个类(子类)从另一个类(父类)继承特性,这样子类就可以重用父类的方法和属性,而无需重新编写。例如,在提供的内容中,`Employee`类被...
Java 程序设计课件:第四章 继承与多态 在 Java 中,继承是实现代码重用的一个重要机制。继承可以使子类继承父类的成员变量和方法,从而实现代码的重用和简化。继承的基本知识包括使用 extends 关键字实现类间的...
在Java编程语言中,继承和多态是面向对象编程的核心概念。它们允许代码复用、扩展功能以及实现灵活的设计。 1. **继承**: 继承是Java中类之间的一种关系,其中一个类(子类)可以从另一个类(父类)继承属性和...
Java中的继承和多态是面向对象程序设计的两个重要特性。继承是一种由已有的类创建新类的机制,通过继承,可以先创建一个公有属性的一般类,然后根据一般类再创建一个具有特殊属性的新类。新类继承一般类的状态和行为...
Java 语言程序设计第 5 章接口多态 本章主要讲解 Java 语言程序设计中接口和多态的概念、语法和应用。接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除...
- **继承与多态是Java面向对象编程的核心概念**。正确理解并运用这些概念可以帮助开发者写出更高质量、更易于维护的代码。 - **注意**:虽然继承和多态非常有用,但在实际项目中应当适度使用,过度依赖继承可能会...