java学习笔记第11天2018.09.13

面向对象:
封装 继承 多态

封装:将对象的属性或者行为隐藏起来,对外提供公共的访问方式(get/cet)。
private:访问权限修饰符,控制属性或者是方法的访问权限,意味着是只能在本类中使用。

继承:
    从一个类中创建出多个类,原有的类称为父类或者超类,基类;创建出的类称为:子类,派生类

    原因:
        当描述人这类事物和学生这类事物时,发现两个类中共同的属性和行为存在,即有重复的代码。
    想要解决代码的重复问题。
    使用继承,让类与类间产生了关系。
    通过extends关键字来表示类和类间的关系: class A  extends  B {}

    子类继承了父类后:
        子类相当于拥有了父类中的所有内容,构造器除外(类名不一致不能继承),私有成员(特殊需使用get,cet对外方式才能继承访问。)
        子类还可以有自己特有的属性和行为。
    注意:不能为了减少代码的编写而乱使用继承,必须是类与类间有所属关系,
           即:子类是父类中的一种事物

    特点:
        一个子类只能有一个父类,一个父类可以有多个子类。
        在java中是一个单继承的特征,但是允许多重继承,类似于生活中的家谱
        A extends B{}
        B extends C{}
        C extends D{}
        在java中,有一个最顶级的父类,是所有对象的直接或者是间接父类----Object

    继承出现后类中成员的变化:
    1.变量:
        子父类中出现了同名变量,建立子类对象,访问该变量,运行的是子类结果。
        this: 代表的是本类对象的引用
        super:代表的是父类的引用
    2.方法:
        子父类中出现了相同的方法的定义,但是方法体执行的内容不同,建立子类对象,调用该方法,
        运行的是子类的内容,这种现象称为:方法的重写或者是方法的覆盖。

        方法(函数)的重载:
            在一个类中,方法名相同,参数列表不同,与返回值类型无关。
        方法重写是必须满足:
        1.父类方法名和子类方法名一样
        2.子类方法的权限修饰符必须大于等于父类
        3.子类方法的返回值类型小于等于父类
        4.不应用private修饰
        5.如果父类方法是静态的,那么重写也是静态;如果父类是非静态重写也是非静态。为了避免出错可以直接复制粘贴。

    @Override :注解,可以用来验证是否是重写方法
    override与overload有什么区别?
    方法重载(overload):
    在同一个类中,可以定义多个名称相同、参数列表不同的函数,叫做方法的重载(和方法的返回值类型无关)。
    方法重写(override):
    在继承中,子类可以定义和父类一样的方法,在子类对象中使用的是子类中定义的方法,这叫做方法的重写;

    3.构造方法:
        在子类的构造器中,第一行都有一条隐藏的super()语句,它会调用父类的无参构造方法。
        创建子类对象时,并没有创建父类对象,子类中只是持有一个父类的引用,即super,可以调用父类中成员。

        为什么要有super()?
        因为继承的属性进行初始化。

        如果父类中没有无参构造方法(即存在有参构造方法),那么子类构造器的第一行,必须显示写出super(参数列表)调用父类的这个有参构造方法
        或者使用this(参数列表)间接调用父类构造方法。


        注意:super()和this()都是必须放在构造器的第一行,如果显示写了super就不能有this,有this了就不能写super
    描述实物类编码的一般程序:
      1.属性私有化
      2.构造方法 
        1.无参
        2.有参
      3.属性的get和set方法
      4.用于返回对象的属性信息
好处:
    1.提高代码的复用性
    2.有了多态的特性

final关键字:
修饰符,表示为是最终的意思。
修饰类:表示这个类是一个最终类,不能被继承
修饰方法:表示这个方法是最终方法,不能被重写
修饰变量,既可以修饰成员变量,也可以修饰局部变量,无论修饰那个都代表是最终变量,即常量,不能被改变。变量名每个字母都大写,多个单词之间用下划线分割。
eg : public static final double MY_PI = 3.14;

抽象类:
是一个特殊类。
具体类: 权限修饰符 class 类名{}
抽象(模糊)类 :权限修饰符 abstract class 类名{}
abstract:
修饰符,修饰类和方法,修饰符的类称为抽象类,修饰的方法称为抽象方法。
抽象类中成员:
变量,方法,构造器方法,抽象方法

特点:
    1.抽象方法一定在抽象类中
    2.抽象类不能实例化,不能创建对象。
    3.抽象类中可以没有抽象方法,目的:就是不让该类创建对象
    4.抽象类是父类,子类继承抽象类后,子类想要创建对象,就必须将继承的所有的抽象方法全部覆盖(子类中要有父类全部的抽象函数);
      否则子类都是抽象类。

注意:abstract不能和private,final,static组合使用

多态:
理解:一个对象具备多种形态
前提:必须有继承或者是实现
体现:父类型的引用指向子类对象(即创建了父类的子类对象,动物类的猫。)
好处:提高代码的扩展性,降低代码的冗余。
弊端:不能调用子类中特有的方法。

类型转换:
    向上转型(自动):  Animal a = new Cat();   double b = 123;
    向下转型(强转):  Cat c = (Cat)a;         int i = (int)b;
    由始至终创建的对象是子类对象,没有变过;而改变的是引用变量。

ClassCastException:类型转换异常

instanceof:比较运算符,结果boolean类型
        判断是否是指定的类型

使用多态创建对象:
    编译是否通过看左边
    运行非静态方法运行的是子类,其余都是父类结果

运行期:所有成员变量和静态函数都是使用父类的,非静态函数使用的是子类重写的。静态成员布参与对态,只有非静态成员参与多态。
多态不能使用子类对象的特有属性和功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值