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天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
26 4
|
13天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
35 17
|
7天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
11 2
|
8天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
5月前
|
缓存 安全 Java
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
31 0
|
6月前
|
安全 Java 编译器
Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
96 0
|
6月前
|
存储 安全 Java
【亮剑】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
42 0
|
存储 缓存 Java
Java中不可或缺的关键字「volatile」
Java中不可或缺的关键字「volatile」
239 0
|
缓存 安全 Java
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
262 0
|
缓存 安全 Java
Java 关键字特性增强-Volatile
Java高级特性增强-Volatile volatile关键字 volatile特性
170 0
Java 关键字特性增强-Volatile