《Java语言与面向对象程序设计》-继承与多态-Java学习笔记5

继承与多态
继承的基本概念:
    1.继承实际上是存在于面向对象对象程序中的两个类之间的一种关系。当一个类获取另一个类中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间有继承关系。

    2.继承能让程序结构清晰,降低编码和维护的工作量。


    3.单重继承:任何一个类都只有一个单一的子类。
       多重继承:一个类可以有一个以上的父类,它静态的数据属性和操作从所有的这些父类中继承。

       *Java中类的继承通过extends关键字来实现//class A extends B{}(A类继承B类)


类的继承:
    1.域的继承:子类可以继承父类的所有非私有域。


    2.域的隐藏:
        (1)在子类中可以重新定义一个与从父类那里继承来的域变量完全相同的变量。这样会导致在子类中有两个同名的变量。
        (2)一般情况下,子类的方法所操作的是子类自己定义的变量,而从父类继承的变量变为不可见,即被子类的同名变量隐藏掉了。
        (3)当子类执行继承自父类的操作时,处理的是继承自父类的变量,当子类执行它自己定义的方法时,所操作的就是它自己定义的变量。


    3.方法的继承与覆盖
        (1)方法的继承:父类的非私有方法作为类的非私有成员,也可以被子类所继承。
        (2)方法的覆盖:消除父类方法所占用的内存,使父类方法在子类中不存在。子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数列表。
           *子类隐藏父类的域只是使之不可见,父类的同名域在子类对象中仍然占有自己独立的内存空间;而子类方法对父类同名方法的覆盖将清楚父类方法占用的内存,从而使父类方法在子类对象中不复存在。


    4.this与super
             this表示的是当前对象本身,即this代表了当前对象的一个引用。对象的引用可以理解为对象的另一个名字,通过引用可以顺利地访问到对象。
             super用于在一个类中引用它的父类,即引用父类的成员,包括父类的属性和方法。其中super代表的父类是直接父类。

 

多态
     多态的概念:所谓多态,一般是指一个程序中同名的不同方法共存的情况。多态可以表现在很多方面:

           (1)子类通过对父类方法的覆盖实现多态

           (2)通过一个类中方法的重载实现多态

           (3)子类的对象作为父类的对象实现多态。


    1.    方法覆盖实现的多态:继承父类的抽象方法并重新定义。


    2.    方法重载实现的多态:
      (1)在同一个类中定义同名方法的情况,一般采用不同的参数列表,包括形式参数的个数、类型和顺序等,来区分重载的方法。
        //public void println()
       //public void println(Boolean x)
      (2)构造函数的重载:在一个类定义了若干个构造函数时,创建该类对象的语句会自动根据给出的实际参数的数目、类型和顺序决定调用哪个构造函数来完成新对象的初始化工作。为了在一个构造函数中充分利用其他构造函数的功能,一个类的不同构造函数之间可以相互调用。当使用this并给它一个参数列表时,this显示调用参数匹配的另一个构造方法。
      (3)调用父类的构造函数:
              1)如果子类没有定义任何构造函数,那么在创建子类对象时将调用父类无参数的构造函数。
              2)如果子类自己定义了构造函数,则在创建子类对象时,系统将首先隐含执行父类无参数的构造函数,然后再执行子类自己的构造函数
              3) 如果在子类自己定义的构造函数中,利用super关键字显式地调用父类地构造函数,系统将不再隐含调用父类地无参数的构造函数。*super的显式调用语句,必须是子类构造函数的第一个可执行的语句。
              *在一个构造方法中,不能像调用一般方法那样调用另一个构造方法。构造方法不是用来调用的,而是new算符的参数。


    3.    对象引用的多态:
       (1)    子类对象做父类对象可以做的事情。我们总是可以通过父类变量让一个子类的对象做父类对象可以做的全部事情。
       (2)    但是通过父类的变量不能让子类对象做父类对象不能做的事情,即使子类对象有这样的功能。
       (3)    如果父类变量指向的实际上是一个子类对象,即早先曾将子类对象的引用赋值给这个父类对象,那么可以用强制类型转换将这个父类变量引用转换为子类对象的引用,也就是将作为父类对象看待的子类对象转变为作为子类对象看待。
       (4)    在程序中emp(Employee类变量)可以是父类的引用,也可以是子类的引用,即emp具有多态性,可以通过关键运算符instanceof实现


//类的定义
class Employee{}
class Manager extends Employee{}
class Diector extends Manager{}


//父类可以指向子类
Employee emp = new Employee();
Employee emp = new Manager();
Employee emp = new Diector();
//子类不可以指向父类

        Employee emp = new Manager(…);//父类引用变量指向子类对象
        Manager mgr;
        mgr = (Manager)emp;//将父类对象引用强制类型转化成子类对象引用
等价于->Manager mgr = new Manager(…)

        Employee emp = new Employee(…);
emp instanceof Employee //表达式结果为真
emp instanceof Manager //表达式结果为假

 

    4.    对象初始化的过程
      (1)    当为对象分配内存空间后,首先将属性单元初始化。这样在对象创建后,就确保有明确的状态,每个属性都有值。、
      (2)    执行显式初始化:在类定义中,属性的定义除说明类型外,还可以赋予一个初值,这就是所谓的显式初始化。
      (3)    执行构造方法中的初始化

 

接口
            1.接口是用来组织应用中的各类并调节它们的相互关系的一种结构,准确的说,接口是用来实现类间多重继承功能的结构。


            2.接口定义的仅仅是实现某一特定功能的一组功能的对外接口和规范,而并没有真正地实现这个功能,这个功能地真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。


            3.一个类只能有一个父类,但是它可以同时实现若干个接口,这种情况下如果把接口理解成特殊地类,那么这个类利用接口实际上就获得了多个父类,即实现了多重继承。与类的继承不同的是一个接口可以有一个以上的父接口,它们之间用逗号分隔,形成父接口列表。


            4.接口中的属性都是用final修饰的常量,接口中的方法都是用abstract修饰的抽象方法。


            5.接口实现
              (1)    在类的声明部分,用implements关键字声明改类将要实现哪些接口
              (2)    如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即具有完全相同的返回值和参数列表。
              (3)    如果实现某接口的类是abstract的抽象类,则它可以不实现该接口所有的方法。
              (4)    一个类在实现某接口的抽象方法时,必须使用完全相同的方法头。如果所实现的方法与抽象方法有相同的方法名和不同的参数列表,则只是在重载一个新的方法,而不是实现已有的抽象方法。
              (5)    接口的抽象方法的访问控制符都已指定为public,所以类在实现方法时,必须显式地调用public修饰符。


        5.Java中声明接口

【public】interfave 接口名【extends 父接口名列表】
{
        //接口体
        //常量域声明
        【public】[static][final] 域类型 域名 = 常量值;
        //抽象方法声明
【public】【abstract】【native】返回值 方法名(参数列表)【throw异常列表】
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值