Java基础班学习笔记(9)

1:final关键字(掌握)
 (1)是最终的意思,可以修饰类,方法,变量。
 (2)特点:
  A:它修饰的类,不能被继承。
  B:它修饰的方法,不能被重写。
  C:它修饰的变量,是一个常量。
 (3)面试相关:
  A:局部变量
   a:基本类型 值不能发生改变
   b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的
  B:初始化时机
   a:只能初始化一次。
       被final修饰的变量只能赋值一次。
        在构造方法完毕前。(非静态的常量)
   b:常见的给值
     定义的时候。(推荐)
    构造方法中。
 
2:多态(掌握)
 (1) 同一个对象在不同时刻体现出来的不同状态。
 (2)多态的前提:
  A:有继承或者实现关系。
  B:有方法重写。
  C:有父类或者父接口引用指向子类对象。
 
  多态的分类:
   a:具体类多态
    class Fu {}
    class Zi extends Fu {}
   
    Fu f = new Zi();
   b:抽象类多态
    abstract class Fu {}
    class Zi extends Fu {}
   
    Fu f = new Zi();
   c:接口多态
    interface Fu {}
    class Zi implements Fu {}
   
    Fu f = new Zi();
 (3) 多态中的成员访问特点
  A:成员变量
    编译看左边,运行看左边
  B:构造方法
    子类的构造都会默认访问父类构造
  C:成员方法
    编译看左边,运行看右边
  D:静态方法
    编译看左边,运行看左边
   
  为什么?
    因为成员方法有重写。(所以运行看右边)
 (4) 多态的好处:
  A:提高代码的维护性(继承体现)
  B:提高代码的扩展性(多态体现)
 (5)多态的弊端:
  父不能使用子的特有功能。
  现象:
   子可以当作父使用,父不能当作子使用。
 (6) 多态中的转型
  A:向上转型
   从子到父
  B:向下转型
   从父到子
 (7) 孔子装爹的案例帮助大家理解多态
多态继承中的内存图解
多态中的对象变化内存图解
 (8)多态的练习
  A:猫狗案例
  B:老师和学生案例
 
3:抽象类(掌握)
  抽象类概述
   回想前面我们的猫狗案例,提取出了一个动物类。并且我们在前面也创建过了动物对象,其实这是不对的。
       为什么呢?因为,我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。 所以说,动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也可以推想,不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
 
 (1)把多个共性的东西提取到一个类中,这是继承的做法。
    但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体。
    也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。
    所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。
    而一个没有具体的方法体的方法是抽象的方法。
    在一个类中如果有抽象方法,该类必须定义为抽象类。
 (2)抽象类的特点
  A:抽象类和抽象方法必须用关键字abstract修饰
  B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
  C:抽象类不能实例化
  D:抽象类的子类
   a:是一个抽象类。
   b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。
  (3)抽象类的成员特点:
  A:成员变量
   有变量,有常量(既可以是变量,也可以是常量)
  B:构造方法
   有构造方法(用于子类访问父类数据的初始化)
  C:成员方法
   有抽象,有非抽象(既可以是抽象的,也可以是非抽象的)
   抽象类的成员方法特性:
  A:抽象方法 强制要求子类做的事情。
  B:非抽象方法 子类继承的事情,提高代码复用性。
 (4)抽象类的练习
  A:猫狗案例练习
  B:老师案例练习
  C:学生案例练习
  D:员工案例练习
 (5) 抽象类的几个小问题
  A:抽象类有构造方法,不能实例化,那么构造方法有什么用?
   用于子类访问父类数据的初始化
  B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?
   为了不让创建对象(为了不让实例化该类)
  C:abstract不能和哪些关键字共存
   a:final 冲突
   b:private 冲突
   c:static 无意义
 
4:接口(掌握)
 (1)回顾猫狗案例,它们仅仅提供一些基本功能。
    比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的,
    是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。
 (2)接口的特点:
  A:接口用关键字interface修饰
   interface 接口名 {}
  B:类实现接口用implements修饰
   class 类名 implements 接口名 {}
  C:接口不能实例化
  D:接口的实现类
   a:是一个抽象类。(但是意义不大,因为抽象类也不能被实例化)
   b:是一个具体类,这个类必须重写接口中的所有抽象方法。
 (3)接口的成员特点:
  A:成员变量
    只能是常量并且是静态的(即使你定义的是非静态变量)
        如:在接口中定义:public int num = 10;
        而其实他的默认修饰符是: public static final num = 10;
   默认修饰符:public static final
   建议:自己手动给出默认修饰符
  B:构造方法
    没有构造方法
  C:成员方法
    只能是抽象的
   默认修饰符:public abstract (即使你定义的时候不写public)
   建议:自己手动给出默认修饰符
 (4)类与类,类与接口,接口与接口
  A:类与类
   继承关系,只能单继承,可以多层继承
  B:类与接口
   实现关系,可以单实现,也可以多实现。
   还可以在继承一个类的同时,实现多个接口
  C:接口与接口
   继承关系,可以单继承,也可以多继承
 (5)抽象类和接口的区别(自己补齐)?
  A:成员区别
   抽象类:
   接口:
  B:关系区别:
   类与类:
   类与接口:
   接口与接口:
  C:设计理念不同
   抽象类:is a,抽象类中定义的是共性功能。
   接口:like a,接口中定义的是扩展功能。

转载于:https://www.cnblogs.com/supoman2015/p/4484665.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值