java, 安卓

Java学习笔记_day9


final关键字

  • final修饰类,该类不能被继承
  • final修饰方法,该方法不能被重写
  • fina修饰变量,该变量不能再重新被赋值,变量就变成常量

final面试题

  • final修饰局部变量引用类型时,是地址值不改变,但是地址值的内容可以改变

final初始化时间

被final修饰的变量只能初始化一次,在构造方法之前初始化(非静态的代码块)

多态

一个事物在不同时刻体现出不同的状态,例子:

    动物 dongwu = new 小猫();

多态的前提

  1. 要有继承关系
  2. 要有方法重写
  3. 要有父类引用指向子类对象

多态的访问特点

  1. 成员变量:编译看左边,运行看左边;
  2. 构造方法:创建对象时,????
  3. 成员方法:编译看左边,运行看右边
  4. 静态方法:编译看左边,运行看左边;

由于成员方法有重写,所以运行看右边;

多态的好处

  1. 提高了代码的维护性(继承保证);
  2. 提高了代码的扩展性(使用父类作为形式参数,那么所有的子类对象都可以作为参数);

多态的弊端

成员方法运行看右边,但是假如这个方法是子类特有,那么就会编译报错,故不能访问子类特有的方法

为了访问子类的特有方法可以使用强转

对象间的转型问题

    //向上转型
      fu = new 子();
    //向下转型,要求fu必须是能够转换成子类的
     zi = (子)fu;

多态中的内存示意图

代码如下:

class Fu {
    public int code = 100;
    public void show() {
        System.out.println("show fu");
    }
}
​
class Zi extends Fu {
    public int code = 10000;
    public void show() {
        System.out.println("show zi");
    }
    
    public void method() {
        System.out.println("method zi");
    }
​
}
​
class DuoTaiDemo3 {
    public static void main(String[] args) {
        //测试
        Fu f = new Zi();
        System.out.println(f.code);     
        f.show();
        f.method();
    }
}
  1. 首先画出方法区
  2. 然后画出方法区中的静态区;
  3. 再画出方法区中的方法;
  4. main方法入栈,给fu开辟内存空间;
  5. 在堆中给zi申请空间,有代表自己的this和代表初始化父类数据的super
  6. 先初始化父类的数据,再初始化子类的数据;
  7. 对象调用成员变量,那么有fu的属性被调用(即使子类中有同样的成员变量,也调用父类的成员变量);
  8. 对象调用成员方法,调用子类的成员方法(运行看右边);

抽象类abstract

抽象类的特点

  • 抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类中的
  • 抽象类不能实例化
  • 抽象类有构造方法
  • 抽象类的子类必须是抽象类或者重写抽象方法
  • 抽象类可以利用多态通过子类实现的实例化

抽象类的成员特点

  1. 成员变量:可以是常量也可以是变量;
  2. 构造方法:有构造方法,是为了子类访问父类的数据初始化;
  3. 成员方法:可以是抽象的也可是非抽象的,抽象是要子类一定要实现;

接口interface

接口的特点

  1. 接口用关键字interface:接口是interface 接口名{ }
  2. 接口无法实例化
  3. 接口的子类(implements)可以是抽象的或者是实现接口的所有抽象方法的具体类;

故有三种多态:

  1. 具体类多态;
  2. 抽象类多态;
  3. 接口多态;

接口的成员特点

  1. 成员变量:默认是public static final,静态的常量;建议自己手动敲出
  2. 构造方法:没有构造方法
  3. 成员方法:只能是抽象类,默认修饰符:public abstract

接口名加上Impl标示某个接口的具体实现类

所有的类都默认继承自Object类

类与类,类与接口,接口与接口的关系

  1. 类与类的关系:继承关系,只能是单继承,可以多层继承;
  2. 类与接口的关系:实现关系可以实现多个接口;
  3. 接口与接口的关系:可以使用extends(继承关系),可以多继承;

java中的类是单继承,但是接口是多继承;

抽象类和接口之间的关系

  • 成员区别
不同 抽象类 接口
成员变量 可以是变量也可以是常量 都是public static final
构造方法
成员方法 可以是抽象也可以是非抽象 默认public abstract
  • 关系区别
  1. 类与类:继承关系,单继承
  2. 类与接口:实现关系,单继承,多实现
  3. 接口与接口:继承关系,可以多继承
  • 设计理念不同

抽象类:是该组事物的共性功能

接口:是该组事物的扩展功能感觉收获到知识请您随便赞赏

发表评论

电子邮件地址不会被公开。