继承的进一步研究
1.1 子类对象实例化过程
子类对象的实例化::先调用父类的构造方法,然后再调用子类的构造方法。
实例:
class Person
{
private String name;
private int age;
public Person(){
System.out.println("父类person中的构造:");
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person
{
//此处添加代码
private String school;
public Student(){
System.out.println("子类Student中的构造:");
}
public void setSchool(String school){
this.school=school;
}
public String getSchool(){
return this.school;
}
}
public class ExDemo01
{
public static void main(String args[]){
Student stu = new Student();
//stu.setName("张三");
//stu.fun();
}
}
结果为:
F:\java>javac ExDemo01.java
F:\java>java ExDemo01
父类person中的构造:
子类Student中的构造:
注意:实际上,此时,对于子类的构造方法中,隐含了一个“super”的语句。有时候将父类成为“超类”。
class Person
{
private String name;
private int age;
public Person(){
System.out.println("父类person中的构造:");
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person
{
//此处添加代码
private String school;
public Student(){
super();//默认隐藏
System.out.println("子类Student中的构造:");
}
public void setSchool(String school){
this.school=school;
}
public String getSchool(){
return this.school;
}
}
public class ExDemo01
{
public static void main(String args[]){
Student stu = new Student();
//stu.setName("张三");
//stu.fun();
}
}
1.2 方法的覆盖
子类定义了与父类同名的方法,但在方法覆盖时候必须考虑到权限。即被子类覆盖的方法不能拥有比父类方法更加严格的访问权限。
所以父类中使用public定义的方法,子类的访问权限必须是public。
java中,访问权限有四种:
private:最小的访问权限
default:什么都不声明
public:最大的访问权限
private《default《public;
实例:
class Person
{
void print(){
System.out.println("父类");
}
};
class Student
{
public void print(){
System.out.println("子类");
}
};
public class ExDemo03
{
public static void main(String args[]){
Student stu = new Student();
stu.print();
}
}
输出为;
F:\java>javac ExDemo03.java
F:\java>java ExDemo03
子类
1.3 如果飞要调用父类的被覆盖的方法呢?
通过super关键字就可以完成此功能,super关键字可以从子类访问父类的内容,如果要访问被覆盖的方法:super.方法();
//import java.lang.*;
class Person
{
void print(){
System.out.println("父类");
}
};
class Student extends Person
{
public void print(){
super.print();
System.out.println("子类");
}
};
public class ExDemo03
{
public static void main(String args[]){
Student stu = new Student();
stu.print();
}
}
结果为:
F:\java>javac ExDemo03.java
F:\java>java ExDemo03
父类
子类
如果去掉super,默认是this.print();程序不断调用自己的子类的print();
//import java.lang.*;
class Person
{
void print(){
System.out.println("父类");
}
};
class Student extends Person
{
public void print(){
print();
System.out.println("子类");
}
};
public class ExDemo03
{
public static void main(String args[]){
Student stu = new Student();
stu.print();
}
}
结果:
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
1.4 this与super的区别
A:属性访问
this访问本类中的属性,如果本类没有此属性则从父类中继续查找。
super直接访问父类的属性
B:方法
this访问本类中的方法,如果本类没有此方法则从父类中继续查找。
super直接访问父类的方法
C:构造调用
this调用本类构造
super调用父类构造
D:
this表示当前对象
super无此概念
分享到:
相关推荐
"Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...
总的来说,《JAVA学习笔记》是一本全面且实用的Java学习资源,无论你是初入Java殿堂的新手,还是希望进一步提升技能的开发者,都能从中受益匪浅。通过阅读并实践书中的例子,你将能够扎实地掌握Java编程,并具备解决...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...
这份“Java学习笔记(必看经典).doc”文档将涵盖Java的核心概念和重要知识点,对于初学者和有经验的开发者来说都是宝贵的参考资料。 首先,Java的基础部分通常包括以下几个方面: 1. **Java语法基础**:这是所有...
以下是对Java学习笔记中提到的关键知识点的详细阐述: 1. **易用性**:Java的语法简洁,比C++更易于理解和学习。它的设计目标之一是让开发者能在各种平台上编写代码,而无需考虑底层硬件的复杂性。 2. **分布式...
《良葛格JAVA 学习笔记》是由知名IT专家林信良,网名“良葛格...通过《良葛格JAVA 学习笔记》,读者可以全面系统地学习Java编程,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅,进一步提升自己的编程技能。
《良葛格java学习笔记》是一份集合了Java学习精华的资源,主要针对初学者和对Java编程感兴趣的读者。这份笔记是由用户从良葛格的网站上精心整理并转化为CHM格式,便于阅读和查阅。CHM(Compiled Help Manual)是微软...
《林信良Java学习笔记》是一本深受程序员喜爱的Java学习资源,尤其因其繁体字版,对于中文读者来说,提供了更为亲切的阅读体验。这本书深入浅出地讲解了Java编程语言的基础知识和高级特性,旨在帮助初学者快速掌握...
Java是世界上最流行的编程语言之一,...以上就是“达内Core Java学习笔记”中涉及的主要知识点。通过深入学习和实践,初学者可以逐步建立起坚实的Java编程基础,并为进一步学习Java的高级特性和框架打下坚实的基础。
【JAVA学习笔记】是一份专为Java初学者设计的学习资源,包含了从基础知识到进阶概念的全面讲解。PDF版的格式使得学习者可以方便地在各种设备上阅读和打印,随时随地提升自己的Java技能。 这份笔记可能涵盖了以下几...
以上内容是“良葛格Java学习笔记”中的核心知识点,通过深入学习和实践,可以帮助读者建立起坚实的Java基础,进一步提升编程技能。其中,ch01.pdf可能详细介绍了Java的基础知识,而ch02.pdf可能涵盖了更高级的主题,...
【Java学习笔记】是针对Java编程语言的一份详尽的学习资料,主要由“圣思源”提供,旨在帮助初学者和进阶者深入理解和掌握Java技术。这份笔记可能包含了从基础语法到高级特性的全面讲解,结合了理论与实践,通过实例...
描述中的重复部分"java学习笔记1java学习笔记1java学习笔记1"可能是为了强调笔记的专注主题,即全面深入学习Java。 在Java的学习过程中,首先会接触到的是基础语法,包括变量、数据类型、运算符、流程控制语句(如...
《良葛格的Java学习笔记》是一本专为Java初学者设计的教程,作者林信良深入浅出地讲解了Java编程的基础知识。这本笔记覆盖了Java学习的重要概念,包括但不限于以下几个方面: 1. **Java简介**:Java是一种跨平台、...
《良葛格 Java 学习笔记》是一份专为初学者设计的 Java 编程教程,旨在帮助初入编程领域的学习者快速掌握 Java 语言的基础知识。这份 PDF 格式的文档详细介绍了 Java 的核心概念、语法和编程技巧,是学习 Java 的...
总之,这份"JAVA JDK6学习笔记"是一个全面的教程,它结合了理论讲解、实例演示和学习资料,无论你是Java新手还是希望进一步提升技能的开发者,都能从中受益。通过深入学习,你将能够熟练掌握Java的基础语法,了解JDK...