黑马程序员_类的继承和抽象类

------- android培训java培训、期待与您交流!----------

 

1 继承

  提高了代码的复用性

  让类与类之间产生了关系,有了这个关系,才有了多态的特性

注意:千万不要为了获取其他类的功能,简化代码而继承.

     必须是类与类之间有所属关系才可以继承   所属关系: is a

     

java只支持单继承不支持多继承:当父类中定义了相同的功能时,当功能内容不同时子类不知道运行那个功能

例子:java不支持多继承,如果有多个父类,然后父类有一样的函数的时候,子类不知道要运行那个功能
class A
{
         void show()
         {
         System.out.print(a);
         }
}
 
class B
{
         void show()
         {
         System.out.print(a);
         }
}
 
class C extends A,B //这个是错误的子类不知道运行那个功能
{
         void show()  
         {
         System.out.print(a);
         }
}

要创建最子类的对象

查阅父类功能,创建子类对象使用功能

 

聚集:聚合和组合  has  a

     聚合:一个球队有球员     组合:手是身体的组成部分(紧密联系程度高)

2 变量

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

  子类要访问本类中的变量,用this

  子类要访问父类中的同名变量,用super

 

super的使用和this的使用几乎一致

this是代表本类对象的引用

super是代表父类对象的引用

 

3 子父类中的函数

当子类和父类出现了同名函数的时候,会运行子类的函数,这种情况叫覆盖或者重写

 

4 覆盖

  必须保证子类权限大于或等于父类权限

  静态只能覆盖静态

 

5 记住大家:

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

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

class Fu
{
         void speak()//如果是public void speak而子类中的方法不是public,继 承不了,程序会错误必须保证子类权限大于或等于父类权限
 
//如果是private void speak,程序不会出错,但是不会覆盖,因为子类都访问不到父类
         {
         System.out.print(vb);      
         }
         void show()
         {
         System.out.print(name);  
         }
}
 
class Zi extends Fu
{
         void speak()
         {
         System.out.print(java);//这行是覆盖了父类的speak方法
         }
}

6 子类的实例化过程

  结论:

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

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

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

 

为什么子类总会访问父类中的空参数函数呢?

因为子类继承父类的时候,父类的数据子类可以直接获取,必定要看看父类是怎样初始化这些数据的,所以要先访问一下父类中的构造函数

 

注意:super语句一定定义在子类构造函数的第一行

 

 

7经验:

 在本类中构造函数调用另一个构造函数公式为:this(...);

 子类要调用父类构造函数公式:super(...);

 

8 final:最终  作为一个修饰符

  1可以修饰类,函数,变量

  2被final修饰的类不可以被继承

  3被final修饰的方法不可以被复写,没有被final修饰的方法可以被复写

  4被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量又可以修饰局部变量    常量书写格式:所有字母都大写,多单词组成用_连接

  5内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量

 

9 当多个类出现相同功能,但是功能主题不同,这是可以进行向上抽取,这时只抽取功能定义,而不抽取功能主题

 

 

抽象类的特点:

1,抽象方法一定在抽象类中

2,抽象方法和抽象类都必须被abstract关键字修饰

3, 抽象类不可以用new创建对象,因为调用抽象方法没意义

4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象使用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类.

 

为什么会有抽象类?

因为有一些函数功能是相同的,但是功能主体不同,在父类中就不要写功能主体,定义成抽象类,让子类去复写他

 

抽象类比一般类多了一个抽象函数,就是在类中可以定义抽象方法.

抽象类不可以创建对象

abstract class student //前面有abtract表示这是一个抽象类,不可以创建对象
{
         abstract void study();//这是一个抽象方法,子类要复写它
         void sleep()
         {
         System.out.print("睡觉");//这不是一个抽象方法,子类不需要复写它
         }
}
 
class baseStudent extendsstudent
{
         void study()
         {
         System.out.print("我学习的是基础");
         }       
}

10 例子
开发的时候要把公司的员工建模,员工有三个属性,姓名工资和工号,另外经理还具备奖金属性,请使用继承的思想,设计出员工类和经理类,要求类中提供必要的方法进行属性访问
 
abstract class employee
{
         private String name;
         private double pay;
         private double id;
         employee(String name,double pay,double,id)
         {
         this.name=name;
         this.pay=pay;
         this.id=id;
         }
 
         public void work();
        
}
 
class pro extends employee
{
         pro(String name,double pay,double,id);
         {
         super(String name,double pay,double,id)
         }
         public void work()
         {
         System.out.print("work");
         }
}
 
class manager extendsemployee
{
         private double bonus;
         manager(String name,double pay,double,id,double bonus)
         {
         super(String name,double pay,double,id);
         this.bonus=bonus;
         }
         public void work()
         {
         System.out.print("manager");
         }
}


 

11 子类只需要复写抽象类中的抽象方法,不是抽象类的方法不用复写,如果不想子类复写父类的方法可在前面加final

 

12 接口:interface

   当抽象类中的方法都是抽象的时候,这个类叫做接口类可以用interface 来定义

   子类实现interface用implements关键词

   inerface类:变量和函数都是public

   变量默认是public static final 

   函数默认是pulic abstract

 

13 接口与接口之间可以继承,但是不可以实现,因为实现是要方法体的,接口与类之间是实现,不是继承,因为类继承接口,类就变成了抽象函数,类可以实现多个接口,但不能继承多个类,因为接口是没有方法体的,而类是有方法体的,如果类可以继承多个类如果父类的方法是一样的会造成方法冲突

   

 

------- android培训java培训、期待与您交流!---------- 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值