对象的继承
继承关键字:extends
继承的格式:
public class 类名 extends 父类名{
}
注:一个类只能继承一个父类。子类继承父类的全部内容。
访问修饰符同类中 同包中 不同包中 不同包但是有继承关系的子类中
private 可以 不可以 不可以 不可以
默认的 可以 可以 不可以 不可以
protected 可以 可以 不可以 可以
public 可以 可以 可以 可以
重写
ava中,子类可以继承父类中的方法,但有时子类并不想原封不动的继承父类的方法,而是想做一定的修改,这时就需要用到重写
,简而言之就是覆盖原来的方法。
注意:父类 父类名=new 子类(),若像这样定义了对象,通过父类名调用一个已经被重写了的方法,输出的是子类中重写的方法。
public class Parents{
public void study(){
System.out.println("父类的学习方法");}
}
public class child{
public void study(){
System.out.println("子类的学习方法");}
}
public class Manager(){
public static void main(String args[]){
Parents stu=new child();
stu.study();
}
}
运行的结果显示出来的是 子类的学习方法
这个实例表明调用哪个方法,不是取决于对象名前面的类名,而是取决于new后面的对象创建方法();
重写要满足的条件:
1.两者是继承关系;
2.函数的返回值类型,参数(个数,类型,顺序),参数名相同;
3.访问修饰符优先级必须大于等于父类;
4.重写函数中的内容和父类的不同。
存储
student stu=new Student();
中stu储存在栈中,new Student()产生的对象空间储存在堆中 ,stu含有new Student()属性方法的空间的地址
内存中分为3个部分:堆,栈,静态内存
自动转换
(1)父类 父类名=new 子类();
(2)public void 函数名(父类 父类名)
调用的时候传参数进来传的是子类即可实现自动转换
注:自动转换会导致该对象无法调用子类中新增的方法和成员。
强制转换
子类 子类名=(子类)父类名
这种写法将父类对象赋给子类对象。