java第四天

来源:互联网 发布:苹果平板看书软件 编辑:程序博客网 时间:2024/06/01 22:01

继承

[修饰符列表] class 类名 extends 父类名
java只支持单继承,默认父类Object

父类,根类,基类:super class
子类,派生类:sub class

java中继承会将父类中所有数据和方法(出父类构造方法外)全部继承,不可以直接访问父类的私有化成员。

覆盖 override

当父类方法无法满足子类需求时需要对方法进行重写(覆盖)
覆盖后调用时直接执行已重写的方法

发生条件

  1. 两个类存在继承关系
  2. 方法的返回值,方法名和参数列表完全相同
  3. 重写方法具有更高的访问权限
  4. 重写方法不能抛出 更宽的异常
  5. 静态方法不能重写(不存在重写)
  6. 私有方法不能被重写
  7. 构造方法不能被重写
  8. 重写的是方法,与成员变量无关

多态

  • 向上转型 upcasting (自动类型转换)
    Animal a = new Cat()
    编译期:a识别为Animal类型 (静态绑定)
    运行期:直接调用堆中Cat类型方法(动态绑定)
  • 向下转型 dowmcasting (强制类型转换)
    Cat c =(Cat)a;
    强制类型转换存在危险 ClassCastingExcepting
  • instanceof
    结果为boolean型
    a instanceof Cat表示引用a指向的对象是否为Cat类型

if(a instanceof Cat) Cat c =(Cat)a;

多态的优势:项目拓展能力增强
参数使用父类,可以传递更多类型的子类

super

“super.”对于已重写的方法调用父类中的原方法

super与this十分相似,但super存的不是内存地址

  1. super只想的不是父类的对象
  2. super代表当前对象的父类型特征
  3. super可以用在构造方法和成员方法中
  4. super调用时
    1子类父类都用某一成员
    2要在子类中访问父类的特征属性(不涉及父类对象)

super(…)
super用于构造方法,在子类中调用父类的构造方法
作用是给子类中继承的父类成员赋值
若一个构造方法没有this(…)也没有显式地调用super(…)则默认调用super()
每一个构造函数的第一行一定是super()或this()

super(…)只能放在构造方法的第一行
super()与this()不能同时出现

java中每创建一个对象就会调用Object类中的无参数构造函数

在单例模式中,因为将唯一的构造方法私有化了,所以无法继承

final

  1. 修饰的类不能被继承
  2. 修饰的方法不能被重写
  3. 修饰的局部变量赋值一次后不能被更改
  4. 修饰的成员变量必须手动初始化,然后不可更改
  5. 修饰的类引用不能指向其他对象,但对象的属性可以改变

static final 常量的表示方式

abstract

  1. 抽象类:public abstract class 类名{}
  2. 抽象方法:public abstract void 方法名();
  3. 抽象类不能被实例化
  4. 虽然抽象类不能实例化,但抽象类也用构造方法,用于给子类创建对象使用
  5. 抽象类不一定有抽象方法,抽象方法一定出现在抽象类中
  6. 一个非抽象类继承抽象类,必须重写抽象类的抽象方法
  7. 抽象类不能与abstract一起出现,以为抽象类就是用来继承的。
0 0