Java面向对象(三)

1. Java中的继承

1.1 生活中的继承

龙生龙、凤生凤、老鼠的儿子会打洞

1.2 Java中的继承

关键字 extends
格式:
class A extends B {
}
A类是B类的一个子类,
B类是A类的唯一父类。【Java是一门单继承语言】

1.3 继承的基本要求

子类继承父类:

  1. 可以通过继承得到父类的非私有化成员
  2. 不可通过继承得到父类私有化成员
1.4 父类子类同名成员变量问题【super关键字】
class BigDog {
	public String name = "大黄";
}
class SmallDog extends BigDog {
	public String name = "小黄";
	public void test() {
	System.out.println(name);
	System.out.println(super.name);
	}
}
class Demo {
public static vlid main() {
	SmallDog smallDog = new SmallDog();
	System.out.println(smallDog.name);
	smallDog.test();
	}
}

2. 重写

2.1 重写解决的问题

父类方法可以继承给子类使用,但是子类使用不符合子类的实际情况,
重写是修改子类继承父类的方法题,让子类执行当前方法可以满足子类的自由情况。
【注意】子类重写父类方法的方法声明必须一摸一样

2.2 @Override

@Override是注解,用于开启当前编译器严格重写格式检查,要求子类重写父类方法,方法声明完全一致;
(权限修饰符、返回值类型、返回名和形式参数列表顺序、参数类型,个数)
@Override可以不写,但是依然保持重写状态,如果子类方法和父类方法声明不同,这里不再是重写方法
重写是修改骡子累方法体内容,让方法可以更好的满足子类要求。

3. 强制重写需求 abstract

abstract修饰的方法,子类要求强制重写/实现;
在语法层面约束,如果不进行重写,将进行语法报错。
【注意】

  1. abstract修饰的方法不能有方法体;
  2. abstract修饰的方法有且只能定义在abstract修饰的类内或者【interface接口】
  3. 一个普通类继承abstract类,必须实现类内的所有abstract方法
  4. abstract修饰的类内可能存在abstract修饰的方法,abstract方法没有方法体。如果abstract修饰类存在对象,无法执行没有方法体的abstract方法

4. final关键字

final关键字:
修饰成员变量:

  1. 定义是必须初始化;
  2. 一旦赋值无法修改(带有名字的常量)。
    修饰成员方法:
    为最终方法,不能被子类重写,一般用于安全考虑。
    修饰局部变量:
    一旦被赋值,无法修改。
    修饰类:
    不能被继承,没有子类
    Java中String类就是一个final修饰类
    当final修饰的为一个引用型数据变量时,指向不可变,但指向内容可以变。

小扩展

成员变量和局部变量

定义位置:
成员变量:在class大括号或者interface大括号以内,其他大括号之外;
局部变量:方法以内,代码块以外;
作用:
成员变量:用于描述当前类拥有的属性;
局部变量:用于代码运行过程中,对于数据的存储和计算;
初始化:
成员变量:在没有被赋值,或者被构造方法初始化的情况下,成员变量是对应当前数据类型的"零"值;
局部变量:Java中局部变量未初始化,不能使用,避免"野值"问题;
作用域
成员变量: 谁持有当前类对象空间地址,成员变量就在哪里;
局部变量:有且只能是当前大括号范围以内,超出范围无法使用;
生存期
成员变量:从对象创建开始,到当前对象被销毁结束;
局部变量:有且只能是当前大括号范围以内,超出范围被销毁。

“零”值
byte short int => 0;
 long => 0L;
 float => 0.0F;
 double => 0.0;
 boolean => false;
 char ‘\0’ => nul 不可见字符;


引用数据类型 null。