当前位置 博文首页 > m0_48462648的博客:Java中继承方法的使用,以及使用方法的注意
如今能给我安全感的,却只有出门时口袋里的钱包和钥匙,以及手机里显示的满格电
首先创建父类子类测试类:
//父类
public class Fu {
}
//子类
public class Zi {
}
//测试类
public class TestA {
}
子类继承父类:
//子类
public class Zi extends Fu{
}
随后我们在父类中添加非静态方法aa:
public class Fu {
public void aa(){
System.out.println("我是父类中的aa方法");
}
}
之后我们通过在测试类new子类对象,对父类的aa方法进行调用
//测试类
public class TestA {
public static void main(String[] args) {
Zi zi = new Zi();
zi.aa();
}
}
这里的话说明一下,我刚接触这个的时候,就有一个疑问,静态方法不是不能直接调用非静态方法吗?这里的直接调用,是类名.方法名调用,用对象new的话,不属于直接调用;
那我们整体输出一下:
通过上面的示例我们发现,我们调取父类中的方法,与属性调用方法是一致,那么我们如何调用子类中的方法呢?我们在子类中创建非静态方法,bb
//子类
public class Zi extends Fu{
public void bb(){
System.out.println("我是子类中的方法bb");
}
}
我们测试类调用运行:
其实这种普通方法的调用,跟调用属性是一样的,那普通方法是这样的,那静态方法是怎么调取的?
我们在父类种添加静态方法aaa
在子类方法中添加静态方法bbb
//父类
public class Fu {
public void aa(){
System.out.println("我是父类中的aa方法");
}
//静态方法
public static void aaa(){
System.out.println("我是父类中的静态aaa方法");
}
}
//子类
public class Zi extends Fu{
public void bb(){
System.out.println("我是子类中的方法bb");
}
//静态方法
public static void bbb(){
System.out.println("我是子类中的静态方法bbb");
}
}
随后我们在测试类进行调用两个静态方法
但是在测试类调用静态方法的同时,我们需要注意,系统不会提供相应的快捷输入方式,但我们直接手写全名即可,不会出现报错
现在我们运行测试类,看看会输出什么?
这里我们要注意一点,我们这个是创建好的对象,然后才调用的,但其实我们的静态方法和普通方法是有运行的优先级的,这个推荐一篇文章,他写的不错:
静态方法的优先级
其实关于静态优先级也很好理解,我们的Java虚拟机是有栈堆内存的,创建变量一共分为四个步骤,其中牵扯的东西比较多,如果你不想一直做码农的话,我建议就学习一下,了解这里面的内存分布的情况;
我们属性内有重名的情况。那么我们的办法肯定也有重名的情况,这种子类与父类的方法的重名,我们叫做方法的重写,意思是什么,就是父类的方法已经无法满足我们的需求,但是我还有用之前父类中其他方法的功能,但我还需要添加新功能,这怎么办呢,用重写
我i们在父类子类中添加cc方法:
public void cc(){
System.out.println("我是父类中的cc方法");
}
public class Zi extends Fu{
public void bb(){
System.out.println("我是子类中的方法bb");
}
//静态方法
public static void bbb(){
System.out.println("我是子类中的静态方法bbb");
}
//重写
public void cc(){
System.out.println("我是子类中的cc重写方法");
}
}
我们可以在子类重写方法上面写@Override,如果没有报错,就代表这个方法被重写了
运行结果:
这就代表我们父类的cc方法被子类的cc方法重写了
那我们再说,其实重写的话也是有很多要求的:
来一张图片,净化心灵