`
googlelc
  • 浏览: 56671 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java学习笔记(二十二)继承的进一步研究

 
阅读更多

继承的进一步研究


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学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    JAVA学习笔记 林信良

    总的来说,《JAVA学习笔记》是一本全面且实用的Java学习资源,无论你是初入Java殿堂的新手,还是希望进一步提升技能的开发者,都能从中受益匪浅。通过阅读并实践书中的例子,你将能够扎实地掌握Java编程,并具备解决...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    Java学习笔记(必看经典).doc

    这份“Java学习笔记(必看经典).doc”文档将涵盖Java的核心概念和重要知识点,对于初学者和有经验的开发者来说都是宝贵的参考资料。 首先,Java的基础部分通常包括以下几个方面: 1. **Java语法基础**:这是所有...

    Java学习笔记非常详细

    以下是对Java学习笔记中提到的关键知识点的详细阐述: 1. **易用性**:Java的语法简洁,比C++更易于理解和学习。它的设计目标之一是让开发者能在各种平台上编写代码,而无需考虑底层硬件的复杂性。 2. **分布式...

    良葛格JAVA 学习笔记

    《良葛格JAVA 学习笔记》是由知名IT专家林信良,网名“良葛格...通过《良葛格JAVA 学习笔记》,读者可以全面系统地学习Java编程,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅,进一步提升自己的编程技能。

    良葛格java学习笔记

    《良葛格java学习笔记》是一份集合了Java学习精华的资源,主要针对初学者和对Java编程感兴趣的读者。这份笔记是由用户从良葛格的网站上精心整理并转化为CHM格式,便于阅读和查阅。CHM(Compiled Help Manual)是微软...

    林信良java学习笔记

    《林信良Java学习笔记》是一本深受程序员喜爱的Java学习资源,尤其因其繁体字版,对于中文读者来说,提供了更为亲切的阅读体验。这本书深入浅出地讲解了Java编程语言的基础知识和高级特性,旨在帮助初学者快速掌握...

    达内core_java学习笔记

    Java是世界上最流行的编程语言之一,...以上就是“达内Core Java学习笔记”中涉及的主要知识点。通过深入学习和实践,初学者可以逐步建立起坚实的Java编程基础,并为进一步学习Java的高级特性和框架打下坚实的基础。

    JAVA学习笔记

    【JAVA学习笔记】是一份专为Java初学者设计的学习资源,包含了从基础知识到进阶概念的全面讲解。PDF版的格式使得学习者可以方便地在各种设备上阅读和打印,随时随地提升自己的Java技能。 这份笔记可能涵盖了以下几...

    良葛格Java学习笔记

    以上内容是“良葛格Java学习笔记”中的核心知识点,通过深入学习和实践,可以帮助读者建立起坚实的Java基础,进一步提升编程技能。其中,ch01.pdf可能详细介绍了Java的基础知识,而ch02.pdf可能涵盖了更高级的主题,...

    java学习笔记

    【Java学习笔记】是针对Java编程语言的一份详尽的学习资料,主要由“圣思源”提供,旨在帮助初学者和进阶者深入理解和掌握Java技术。这份笔记可能包含了从基础语法到高级特性的全面讲解,结合了理论与实践,通过实例...

    java学习笔记11111

    描述中的重复部分"java学习笔记1java学习笔记1java学习笔记1"可能是为了强调笔记的专注主题,即全面深入学习Java。 在Java的学习过程中,首先会接触到的是基础语法,包括变量、数据类型、运算符、流程控制语句(如...

    《良葛格的Java学习笔记》

    《良葛格的Java学习笔记》是一本专为Java初学者设计的教程,作者林信良深入浅出地讲解了Java编程的基础知识。这本笔记覆盖了Java学习的重要概念,包括但不限于以下几个方面: 1. **Java简介**:Java是一种跨平台、...

    良葛格 java 学习笔记

    《良葛格 Java 学习笔记》是一份专为初学者设计的 Java 编程教程,旨在帮助初入编程领域的学习者快速掌握 Java 语言的基础知识。这份 PDF 格式的文档详细介绍了 Java 的核心概念、语法和编程技巧,是学习 Java 的...

    JAVA JDK6学习笔记

    总之,这份"JAVA JDK6学习笔记"是一个全面的教程,它结合了理论讲解、实例演示和学习资料,无论你是Java新手还是希望进一步提升技能的开发者,都能从中受益。通过深入学习,你将能够熟练掌握Java的基础语法,了解JDK...

    java gui学习笔记

    在"java gui学习笔记"中,我们主要关注两个核心概念:组件(Components)和事件处理(Event Handling)。 首先,GUI界面设计通常涉及各种组件,如按钮(Buttons)、菜单项(MenuItems)、文本字段(TextFields)等...

Global site tag (gtag.js) - Google Analytics