首页 > 编程语言 >java (11)方法的重写和super

java (11)方法的重写和super

时间:2023-01-31 09:24:27浏览次数:44  
标签:11 重写 java 子类 void 方法 父类 super public

1、重写:

在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
2、应用:

​ 重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。

3、重写的规定:

//方法的声明
权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{
方法体

1 //方法的声明
2 权限修饰符   返回值类型    方法名(形参列表)  throws  异常的类型{
3                                     方法体
4 }

 


约定俗称:子类中的叫重写的方法,父类中的叫被重写的方法。
子类重写的方法的方法名和形参列表与父类被重写的方法名和形参列表相同。
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符。
特殊情况:子类不能重写父类中声明为privite权限的方法。
返回值类型:
父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void。
父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子集。
父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型。
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)。
4、super关键字:

super关键字的使用:
在子类的成员方法中,访问父类的成员变量。
在子类的成员方法中,访问父类的成员方法。
在子类的构造方法中,访问父类的构造方法。
super和this关键字的区别:
this在本类的成员方法中,访问本类的成员变量。
this在本类的成员方法中,访问本类的另一个成员方法。
this在本类的构造方法中,访问本类的另一个构造方法。
我们可以在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中声明的指定的构造器。
“Super(形参列表)”的使用,必须声明在子类构造器的首行。
我们在类的构造器中,针对“this(形参列表)”或者“super(形参列表)”只能二选一,不能同时出现。
在构造器的首行,没有显示的声明“this(形参列表)”或者“super(形参列表)”,则默认调用的是父类中空参的构造器。
在类的多个构造器中,至少有一个类的构造器中使用“super(形参列表)”,调用父类中的构造器。
5、实例:

 1 //父类
 2 package extendsTest;
 3 
 4 public class Father {
 5     private String name;
 6     private int age;
 7     private String sex;//性别
 8 
 9     public Father() {
10         System.out.println("父亲无处不在");
11     }
12 
13     public Father(String name, int age, String sex) {
14         this.name = name;
15         this.age = age;
16         this.sex = sex;
17     }
18 
19     public String getName() {
20         return name;
21     }
22 
23     public void setName(String name) {
24         this.name = name;
25     }
26 
27     public int getAge() {
28         return age;
29     }
30 
31     public void setAge(int age) {
32         this.age = age;
33     }
34 
35     public String getSex() {
36         return sex;
37     }
38 
39     public void setSex(String sex) {
40         this.sex = sex;
41     }
42 
43     public void work(){
44         System.out.println("父亲要开始工作了");
45     }
46     public void eat(){
47         System.out.println("父亲要吃饭了");
48     }
49 }
 1 //子类
 2 package extendsTest;
 3 
 4 public class Son extends Father {
 5     private String IDcard;
 6 
 7     public Son(){
 8         super();
 9     }
10 
11     public Son(String name, int age, String sex, String IDcard) {
12         super(name, age, sex);//调用父类中的属性
13         this.IDcard = IDcard;
14 
15     }
16 
17     public String getIDcard() {
18         return IDcard;
19     }
20 
21     public void setIDcard(String IDcard) {
22         this.IDcard = IDcard;
23     }
24     public void eat(){
25       //eat方法的重写
26         System.out.println("儿子要吃饭了");
27         super.eat();//调用父类的方法
28     }
29 }
 1 //测试
 2 package extendsTest;
 3 
 4 public class Test {
 5     public static void main(String[] args) {
 6         Son son=new Son("tom",23,"男","12345678");
 7         son.eat();
 8         System.out.println("IDcard="+son.getIDcard()+",name="+son.getName()+",age="+son.getAge()+",sex="+son.getSex());
 9         Son son2=new Son();
10 
11 
12     }
13 }

 

重载

重载(overloading) 发生在本类。
定义:方法名必须一致,参数列表必须不同(参数的个数或类型不同),返回值类型可以相同也可以不同。即定义在同一类中的两个或多个方法同名但不同参,这就叫做方法的重载。

 1 package day_11_26;
 2 
 3 /**
 4  * @author soberw
 5  */
 6 public class Overloading {
 7 
 8     /**
 9      * 以下方法构成重载
10      */
11     //初始方法
12     public void sum() {
13 
14     }
15     //构成重载,因为参数列表不同
16     public void sum(int i) {
17 
18     }
19     //报错,因为参数列表相同
20 //    public void sum(int a){
21 //
22 //    }
23 
24     //构成重载,因为参数类型不同
25     public void sum(String i) {
26 
27     }
28     //报错  重载跟方法有无返回值无关系
29 //    public int sum(int i){
30 //
31 //    }
32     //构成重载 ,因为参数列表和长度都不同
33     public void sum(int i,int j){
34 
35     }
36     //报错 重载与修饰符无关
37     protected void sum(int i){
38         
39     }
40 }

 

标签:11,重写,java,子类,void,方法,父类,super,public
From: https://www.cnblogs.com/zhbx/p/17077782.html

相关文章

  • Java(11)super 和 this
    一、this概念:this代表着当前对象的引用,this代表的是执行者,this本质是一个执行当前对象的指针 最常见的情况是是对象的属性因为与构造器参数同名而被构造器参数屏蔽时,......
  • 读Java8函数式编程笔记06_Lambda表达式编写并发程序
    1. 阻塞式I/O1.1. 一种通用且易于理解的方式,因为和程序用户的交互通常符合这样一种顺序执行的方式1.2. 将系统扩展至支持大量用户时,需要和服务器建立大量TCP连接,因此......
  • Java(10)成员变量和局部变量
    1、声明的位置局部变量:方法体{}中,形参,代码块中成员变量:类中方法外  ①、类变量:有static修饰  ②、实例变量:没有stati......
  • Java(9)类/对象/接口
    一.Java是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种......
  • java(8)访问修饰符
    1.1public任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法只有在使用public访问修饰符时,类的成员才可被同一包或不同包中的所有类访问。......
  • java(7)
    封装封装是JAVA面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内......
  • java(6)Java 对象间关系(依赖、关联、聚合、组合)
    依赖(Dependency)依赖关系,是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。使用关系。一般情况下,依赖关系在Java语言中体现为局域变量、方法的形参,或者对......
  • java(5)常用的 dos 命令
    查看当前目录是有什么内容dirdirdird:\abc2\test200 切换到其他盘下:盘符号cd:changedirectory案例演示:切换到c盘cd/Dc: 切换到当前盘的其他目录下(使......
  • 11-含有无关项的卡诺图化简
    含有无关项卡诺图化简练习卡诺图化简可以不写最小项,直接根据与或式填到卡诺图中含无关项化简在实际应用中,会有一些最小项取值不会出现或者有些取值我们不关心,称这些......
  • java(3)变量和常量
     变量的类型只有引用数据类型和基本数据类型(byte,short,char,int,long,float,double,char)两种。 ......