您的位置:首页 > 编程语言 > Java开发

JAVA学习日志(7-2-子父类中成员的特点)

2016-07-19 00:00 513 查看
子父类出现后,类成员的特点:

类中的成员:

1.变量

如果子类中出现非私有的同名成员变量时

、 子类访问本类变量用this,访问父类变量用super

class Fu{
int num=4;
}
class Zi extends Fu{
int num=5;
void show(){
System.out.println(super.num); //关键字super:引用父类对象
}
}
class ExtendsDemo2{
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
//输出结果为4


2.函数

当子类和父类出现一模一样的函数时,

当子类对象调用该函数,会运行子类函数的内容

这种是函数的另一个特性:重写(覆盖)

当子类继承父类,沿袭了父类的功能到子类中,

但是子类虽具备该功能,但功能的内容却和父类不一致,

这时没有必要定义新功能,而使用覆盖特性,保留父类的功能定义

并重写功能内容

class Fu{
void show(){
System.out.println("我是你爸爸");
}
void speak(){
System.out.println("VB");
}
}
class Zi extends Fu{
void show(){
System.out.println("我没你这儿子");
}
void speak(){
System.out.println("JAVA");
}
}
class ExtendsDemo2{
public static void main(String[] args){
Zi z=new Zi();
z.show();
z.speak();
}
}

该特性可用于更新、扩写功能

class ExtendsDemo2{
public static void main(String[] args){
newTel t=new newTel();
t.show();
}
}
class Tel{
void show(){
System.out.println("number");
}
}
class newTel extends Tel{
void show(){
super.show();
System.out.println("name");
System.out.println("pic");
}
}

**子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败

静态只能覆盖静态

与重载的区别

重载:只看同名函数参数列表

重写:子父类方法一模一样

3.构造函数

在对子类对象进行初始化时,父类的构造函数也会运行,

那是因为子类的构造函数默认第一行有一条隐藏的语句super( );

super():会访问父类中的空参数的构造函数 而且是子类中所有的构造函数的默认第一行

class ExtendsDemo2{
public static void main(String[] args){
Zi z=new Zi();
Zi z1=new Zi(4);
}
}

class Fu{
Fu(){
System.out.println("fu run");
}
}
class Zi extends Fu{
Zi(){
System.out.println("zi run");
}
Zi(int x){
System.out.println("zi..."+x);
}
}
/*输出结果为
fu run
zi run
fu run
zi...4
*/

如果父类没有空参数,则必须在子类中指明访问对象:super(参数)

为什么子类一定访问父类的构造函数:

因为父类中的数据 子类可以直接获取,

所以子类对象在建立时,需要先查看父类是如何对
3ff0
这些数据进行初始化的

所以子类在对象初始化时,要先访问父类中的构造函数

如果要访问父类中的指定函数,可以通过super语句指定(super语句必须写在第一行与this() 不能共存)

**子类的实例化过程:

子类的所有构造函数,默认都会访问父类中空参数的构造函数

因为子类每一个构造函数内的第一行都有一句隐藏的super();

当父类中没有空参数的构造函数时,子类必须通过super或this语句来指定要访问的函数

子类的构造函数也可以手动指定this语句来访问本类中的构造函数

子类中至少会有一个构造函数来访问父类中的构造函数

class Person1{
private String name;
Person1(String name){
this.name=name;
}
}
class Student1 extends Person1{
Student1(String name){
super(name);
}
void method(){
super.show();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: