黑马程序员_继承的理解

9 篇文章 0 订阅
9 篇文章 0 订阅
---------------------- android培训java培训、期待与您交流! ----------------------

继承:

a) 概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无序再去定义这些属性和行为,只要继承那个类即可。

b) 那多个类成为子类,单独这个类成为父类或者基类超类,

c) 子类可以直接访问父类重的非私有的属性和行为。

d) 通过extends关键字让类与类之间产生继承关系

e) 。特点:

1、继承的而出现提高了代码的复用性。

2、继承的出现让类与类之间产生了关系,提供了多态的前提。

3、Java支持单继承,对于多继承,java保留了这种机制并进行了改良,避免了多继承调用时的不确定性。

它这个是发送端,首先 要关联你要发送的源文件,可以单独在

对于使用一个继承体系。

1、查阅顶层类中的 共性内容了解该体系的基本功能。

2、创建该体系的子类对象。

简单一句话:可以多个子类继承一个父类,但是不一个 类继承多个父类,在java中是不允许的。

什么时候使用继承?

当事物之间存在着所属关系时,就可以使用继承,

所属:xxxyyy的一种,即x继承y

如果A真继承了BB中的锁有的功能是不是A都具备了。

继承子父类中的成员变化。 

1、成员变量:

a) 当子父类中出现同名的成员变量时,可以使用super关键字来区分,父类的成员变量。

b) Superthis用法很相似,this代表的是本类的对象,super代表父类的所属的空间,

c) 先有父类在有子类。面试中会出现,开发中几乎没有,因为父类的成员都是从下到上抽取的,子类中还保留相同的变量干嘛?

2、成员函数

   当子父类出现一模一样(返回值、函数名、参数列表全部相同)的函数时,就会出现调用时运行子类的方法的情况。

   这种情况,形象成为覆盖或者重写或者覆写。

   什么时候用覆盖?

   当对一个类中的功能的内容进行重新定义时,可以定义该类的子类,并保留父类中的功能声明,重新定义功能内容,并建立子类对象调用该功能。   

/*

当子父类中出现一模一样的函数时,就会出现调用时运行子类的方法的情况。

这种情况,形象的称为 覆盖或者重写或者叫做覆写 override

什么时候用覆盖?

当对一个类中的功能的内容进行重新定义的时,可以定义该类的子类,并保留父类中的功能声明,

重新定义功能内容。并建立子类对象调用该功能。

覆盖小细节:

1,子类方法覆盖父类方法时,权限必须大于等于父类的权限。

2,静态只能覆盖静态,或者被静态覆盖。 

*/

class Fu

{

public static void show()

{

System.out.println("fu show");

}

}

class Zi extends Fu

{

public static  void show()

{

System.out.println("zi show");

}

}

class ExtendsDemo3 

{

public static void main(String[] args) 

{

// Zi z = new Zi();

// z.show();

//Phone p = new Phone();

NewPhone p  = new NewPhone();

p.show();

}

}

//描述手机。来单显示 显示 号码。

class Phone

{

void show()

{

System.out.println("fu number");   }

}

/*

为了对Phone类中的来电显示功能进行改变。

定义了一个子类,保留了父类中功能的声明,但是重新定义了功能的内容。

这就是覆盖的应用。

*/

class NewPhone extends Phone

{

void show()

{

super.show();

System.out.println("name");

System.out.println("pic");

}

}

3、构造函数

   特点:

   在运行时,发现父类构造方法先运行了,然后才是子类构造函数。

   原因:是因为子类的所有的构造函数中都有一句默认的隐式语句:super();会默认调用父类重空参数的构造函数。

   为什么有super默认语句呢?

   因为子类对象在初始化时,必须要到父类先去初始化。

   为什么要到父类中去初始化呢?

   因为子类继承了父类,可以获取父类中的数据,所以在使用父类数据之前必须要明确父类是如何对自己的成员进行初始化的。

这也是子类一定要访问父类构造函数的原因。所以父类的构造函数有两个作用:1、给本类初始化

如果父类中的没有空参数的构造函数,

   那么此时在手动就必须通过super语句或this语句指定要访问父类的构造函数。

   注意:super关键字必须定义第一行。任何构造函数中的默认第一句都是super.

   面试题:为什么superthis不能再构造函数中同时出现?

   为什么super语句必须放在第一行?

   因为只有父类初始化完之后才初始化子类。

    Objectjava中所有类的父类。

   

   以上就是一个子类的实例化过程。

实现代码:

class Fu extends Object 

{

// int num ;

Fu()

{

//super();

System.out.println("fu.......");

}

Fu(int x)

{

// num = 10;

System.out.println("fu run..."+x);

}

}

class Zi extends Fu

{

Zi()

{

//super();

System.out.println("zi.....");

}

Zi(int x)

{

this();

//super();

// super(x);

System.out.println("zi run..."+x);

}

}

 

class  ExtendsDemo4

{

public static void main(String[] args) 

{

new Zi(5);

new Zi();

}

}

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值