java------方法的覆盖[重写],super和final关键字

简介: java------方法的覆盖[重写],super和final关键字

方法覆盖(也称为方法的重写,Override)定义:

它是多态性的重要体现之一,是动态多态性的表现形式,他是指子类中可以定义名称,参数列表,返回值类型均与父类中某个方法完全相同的方法,我们就说子类中定义的这个方法覆盖了父类中的同名方法。

举例:

//anmial为父类
package anmial;
public class Animal {
        public void show(){//定义方法show
            System.out.println("I am a dog");
        }
    }
//子类Fish继承了父类Animal
public class Fish extends Animal {
    @Override
    public void show() {//对父类方法show的重写
        System.out.println("I am a fish");
    }
    public void shows(){//子类特有的方法
        System.out.println("我每天都在水里");
    }
}
import anmial.Animal;
import anmial.Fish;
public class test {
    public static void main(String[]args){
        Fish fish=new Fish();//为子类创建实例化对象
        fish.show();//调用重写的方法
        fish.shows();//调用自身方法
    }
}

输出

I am a fish
我每天都在水里

重写/覆盖需要注意的地方:


<1>必须同时满足方法名是同名的,参数列表是相同的,返回值也必须相同。


<2>如果父类的方法有final关键字修饰(称为最终方法),那么该方法不能被子类所覆盖。


<3>方法覆盖一定是建立在继承的基础上的,如果父类中的某个方法的访问权限是private,那么子类就无法进行覆盖。


<4>覆盖方法的访问权限一定要大于或等于被覆盖方法的访问权限,例如:子类父类处于同一个包中,父类的某方法的权限是public,那么子类中的该方法的权限也必须是public,如果父类中该方法是缺省访问权限,那么子类中的访问权限可以是缺省类,protected或者public访问权限。


类修饰符的含义:

注:abstract和final这两个修饰符不能出现在一个类的定义中

成员属性修饰符含义:

成员方法修饰符含义:


注意:


<1>public,protected,缺省和private这四个修饰符中只能选择一个作为方法的访问控制。


<2>final和abstract这两个修饰符不能同时用来修饰成员方法。


super关键字:

super关键字主要用来访问父类的成员属性,父类的成员方法以及父类的构造方法。


访问父类成员属性的语法格式是:

super.父类成员属性;

访问父类构造方法语法格式是:

super.([paramlist]);

访问父类成员方法语法格式是:

super.父类成员方法名([paramlist]);

举例:

package shape;
public class Father {
    String name="小头爸爸";
   public Father(){
       System.out.println("我是"+name+"的构造方法");
   }
   public void show(){
       System.out.println("我是"+name+"的方法show");
   }
}
package shape;
public class Son extends Father{
    String name="大头儿子";
    public Son() {//访问父类构造方法
        super();
        System.out.println("我是"+name+",我继承了"+super.name+"的构造方法");
    }
    @Override
    public void show() {//访问父类成员属性和方法
        System.out.println("我是"+name+",我的爸爸是"+super.name+"!我继承了"+super.name+"父类的方法show");
    }
}
package shape;
public class SOn_test {
    public static void main(String[]args){
        Son son=new Son();
        son.show();
    }
}

输出如下:

我是小头爸爸的构造方法
我是大头儿子,我继承了小头爸爸的构造方法
我是大头儿子,我的爸爸是小头爸爸!我继承了小头爸爸父类的方法show

注意:


<1>调用父类无参的构造方法:super(),一定要出现在子类构造方法体中的第一句,而且可以省略不写,因为父类的无参构造在实例化子类之后会自动调用。


<2>如果调用父类带参数的构造方法,那么super(paramlist)一定要显式地写到子类构造方法体的第一句。


<3>调用父类构造方法的语句和调用子类重载的构造方法的语句(this关键字的一种用法)不能同时在子类构造方法体中。


final关键字:

final关键字表示最终的含义,可以用来修饰类,成员属性,局部变量以及成员方法。


final用在类的声明部分(class关键字的前面)表示该类不能有自己的“后代”,也就是不允许被其他类所继承,final用来修饰成员属性和局部变量表示该值是常量,不能被修改,final修饰成员方法表示该方法不能被子类所覆盖。


举例:

给父类属性增加final关键字修饰:

final String name="小头爸爸";

在子类中尝试修改该值:

super.name="大头爸爸";

报错!该值不允许被修改:

将父类的属性修改为final:

public class Son extends Father

子类将无法继承该属性:

将父类中的成员方法属性修改为final:

final void show()

子类将无法对其进行修改:

相关文章
|
2月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
36 2
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
92 9
|
21天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
4天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
21天前
|
缓存 安全 Java
Java volatile关键字:你真的懂了吗?
`volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
2137 3
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
57 4
|
2月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
76 4
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
30 1
|
2月前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
59 9