博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你了解继承吗?
阅读量:4984 次
发布时间:2019-06-12

本文共 1827 字,大约阅读时间需要 6 分钟。

继承是所有OOP语言不可缺少的部分,在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。比如下面这段代码:

class 
Person {
    
public 
Person() {
         
    
}
}
 
class 
Man 
extends 
Person {
    
public 
Man() {
         
    
}
}

  类Man继承于Person类,这样一来的话,Person类称为父类(基类),Man类称为子类(导出类)。如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。

  1.子类继承父类的成员变量

  当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

  2.子类继承父类的方法

  同样地,子类也并不是完全继承父类的所有方法。

  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

  注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。(后面会讲到)

  3.构造器

  子类是不能够继承父类的构造器,但是要注意的是,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。看下面这个例子就清楚了:

class 
Shape {
     
    
protected 
String name;
     
    
public 
Shape(){
        
name = 
"shape"
;
    
}
     
    
public 
Shape(String name) {
        
this
.name = name;
    
}
}
 
class 
Circle 
extends 
Shape {
     
    
private 
double 
radius;
     
    
public 
Circle() {
        
radius = 
0
;
    
}
     
    
public 
Circle(
double 
radius) {
        
this
.radius = radius;
    
}
     
    
public 
Circle(
double 
radius,String name) {
        
this
.radius = radius;
        
this
.name = name;
    
}
}

  这样的代码是没有问题的,如果把父类的无参构造器去掉,则下面的代码必然会出错:

  改成下面这样就行了:

  4.super

  super主要有两种用法:

  1)super.成员变量/super.成员方法;

  2)super(parameter1,parameter2....)

  第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类的构造器中显示地调用父类的构造器,要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。

    转载自海 子的博客:http://www.cnblogs.com/dolphin0520/p/3803432.html

转载于:https://www.cnblogs.com/ruiming-chen/p/4956329.html

你可能感兴趣的文章
读书笔记-HBase in Action-第一部分 HBase fundamentals
查看>>
多态应用-带宠物看病案例
查看>>
基于C的文件操作(转)
查看>>
反编译那点事儿
查看>>
CSS
查看>>
Windows10搭建FTP服务器
查看>>
深入理解低功耗蓝牙的配对过程- Part 4 LE Secure Connections
查看>>
Silverlight官方视频教程!
查看>>
Win10 UWP 开发系列:使用SQLite
查看>>
h5新加标签
查看>>
noip考前抱佛脚 数论小总结
查看>>
4-17
查看>>
为什么要做项目管理
查看>>
怎么让搜索引擎更快地收录自己的网站
查看>>
解决Docker时区与主机时区不一致的问题
查看>>
JQuery获取与设置select
查看>>
this与event.target的区别
查看>>
跟随高老爷子,重温java
查看>>
While循环,格式化输出,算术运算符,改py文件名字
查看>>
Spark调优
查看>>