一. 父、子类之间的转型:
1. 向上转型(自动转型):
父类 父类对象=子类实例;
安全的,但会丢失精度,eg:鱼是动物。
2. 向下转型(强制转换):
子类 子类对象=(子类)父类对象;
不安全的,eg:动物是鱼。
二.访问权限修饰符:
- 可用private封装属性:
封装属性: private 属性类型 属性名;
封装方法: private 方法返回类型 方法名称(参数){}
- 封装时要设置或获取属性值,只能使用Getter和Setter方法。
三.继承
class 父类{
//定义父类
}
class 子类名 extends 父类{
}
注意:
- 在Java中只允许单继承,不允许多继承,即一个子类只能有一个父类。
- 父类继承的私有成员,不能被子类直接使用,必须通过设Getter和Setter方法间接操作。
- 被final修饰的类不能再被继承。
- Java中不允许多重继承,但可以多层继承。
//多层继承:
class A{}
class B extends A{}
class C extends B{}
5.子类对象实例化会默认先调用父类的无参构造函数,再调用子类构造方法。
四.super:
- super()必须写在子类构造方法的第一行。
- super可调用父类中的构造方法,属性或方法。
super.父类中的属性;
super.父类中的方法;
- super和this的区别:
五.覆写
-
覆写的方法的返回值类型必须有和被覆写的方法的返回值类型一致。
-
被覆写的方法不能为static。
-
被覆写的方法不能拥有比父类更为严格的访问控制权限。
例如:父类方法是default权限,则子类覆写可为default或public。 -
在形式上,类定义的对象只能看到自己所属类中的成员。
//举个例子:
class A{
public void a(){
System.out.println("a类的方法");
}
}
class B extends A{
public void a(){ //方法覆写
System.out.println("b类的方法");
}
public void getB(){ //子类的扩充方法
System.out.println("b类的扩充方法");
}
}
public class one{
public static void main(String args[]){
A a1=new B(); //实例化子类对象
a1.a(); //调用子类B的a()
/* a1.getB(); //编译错误:这个方法父类无法找到 */
B b=(B) a1; //向下转型
b.getB(); //子类对象b的getB()方法
}
}
- 重载和覆写的区别:
六.final(终结器):
- 使用final修饰的类不能有子类。
- 使用final定义的方法不能被子类所覆写。
- 使用final定义的变量就成了常量。