面向对象(二)
1、继承
如果有些类中的属性和方法是重复的,可以将这些属性和方法提取出来组成一个新类,通过extends和这些类产生联系了,这种关系就是继承。
提取出来的新的类称之为父类(超类/基类),原来的类是子类(派生类)。
子类可以继承父类的所有属性和方法,但是只有一部分可见。
继承的优点
- 继承可以提高代码的复用性
java中是单继承,没有多继承但是可以多层继承
Java中所有的类都有一个共同的父类Object
2、重写
重写就是在父类和子类拥有相同方法签名的非静态方法,也叫方法的覆盖
遵从"两等两小一大"原则:可以根据方法修饰符 返回值 方法签名 异常顺着理解
- 重写的方法权限修饰符范围要大于或者等于父类方法的权限修饰符
- 如果父类方法的返回值类型是基础数据类型,那么重写的方法的数据类型应该与父类方法一致
- 如果父类方法的返回值类型是引用数据类型,那么重写的方法的数据类型应该相同或者是该数据类型的子类
- 方法签名一致
3、super关键字
super:代表父类对象,但并不是一个对象
super的用法:
- super.方法:调用父类的方法
- super.属性:调用父类的属性
- super():调用父类的构造器
注意:子类的默认的无参构造器默认调用了父类的无参构造器,当父类没有无参构造器时子类的无参构造器会编译时报错
4、多态
编译时多态:方法重载
运行时多态:方法重写、向上转型、向下转型
编译时看左边,运行时看右边
向上转型:
class A{
}
class B extends A{
}
/**
* 对象a只能调用B中的从A继承到的属性和重写了A中的方法;
*/
Public class Test{
public static viod main(String[] args){
A a = new B();
}
}
向下转型:与强制类型转换类似
class A{
}
class B extends A{
public viod study(A a){
System.out.println("向下转型");
}
}
Public class Test{
public static viod main(String[] args){
A a = new B();
test(A)
}
public viod test(A a){
B b = (B)a;
b.study;
}
}