首页 / JAVA / Java 从入门到进阶之路(十一)
Java 从入门到进阶之路(十一)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 从入门到进阶之路(十一),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4293字,纯文字阅读大概需要7分钟。
内容图文
![Java 从入门到进阶之路(十一)](/upload/InfoBanner/zyjiaocheng/651/583adfed3a15414ba60b7c522b5f7c88.jpg)
之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承。
在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这时候我们就要对类方法进行重写,如下:
1 public class HelloWorld { 2 public static void main(String[] args) { 3 Student student = new Student(); 4 student.name = "张三"; 5 student.age = 18; 6 student.city = "北京"; 7 student.userInfo(); // 我叫张三,今年18岁 8 9 Teacher teacher = new Teacher(); 10 teacher.name = "李四"; 11 teacher.age = 28; 12 teacher.city = "上海"; 13 teacher.userInfo(); // 我叫李四,今年28岁,来自上海 14 } 15 } 16 17 class Person { 18 String name; 19 int age; 20 21 void userInfo() { 22 System.out.println("我叫" + name + ",今年" + age + "岁"); 23 } 24 } 25 26 class Student extends Person { 27 String city; 28 } 29 30 class Teacher extends Person { 31 String city; 32 33 void userInfo() { 34 System.out.println("我叫" + name + ",今年" + age + "岁," + "来自" + city); 35 } 36 }
在上面的代码中,我们分别定义了 Student 和 Teacher 两个列,且都继承了 Person 类,不同的是我们在 Teacher 类中定义了一个和父类 Person 类相同的 userInfo() 方法,方法中发发明和参数相同,方法体不同,这其实就是类方法的重写。
重写需要遵循“两同两小一大”原则(一般都是相同):
1、两同
1)、方法名称相同
1>、void 和 基本类型时子类和父类必须相同
2>、引用类型时子类必须小于或等于父类
2)、参数列表相同
2、两小:
1)、子类方法的返回值类型小于或等于父类
2)、子类方法所抛出的异常小于或等于父类
3、一大
1)、子类的访问权限大于或等于父类
上面的例子我们其实已经说了“两同”了,下面我们看一下“两小”中的 子类方法的返回值类型小于或等于父类
1 class Person { 2 String name; 3 int age; 4 5 void userInfo() { 6 System.out.println("我叫" + name + ",今年" + age + "岁"); 7 } 8 9 double num(){ return 1.23; } 10 11 Person person(){ return null; } 12 13 Student student(){ return null; } 14 } 15 16 class Student extends Person { 17 18 double num(){ return 4.56; } 19 20 // int num(){ return 8; } 编译错误,基本类型必须相同 21 22 Student person(){ return null; } 23 24 // Person student(){ return null; } 编译错误,引用类型时必须小于或等于父类 25 }·
方法重写(Override)很容易让我们想起来之前说过的方法重载(Overload),我们再来看一下之前说过的重载。
1 public class HelloWorld { 2 public static void main(String[] args) { 3 Aoo aoo = new Aoo(); // 创建一个 Aoo 对象 4 aoo.foo(); // foo 无参 5 aoo.foo(123); // foo 整型参数123 6 aoo.foo("abc"); // foo 字符串参数zhangsan 7 aoo.foo("abc",123); // foo 字符串+整型参数abc123 8 aoo.foo(123,"abc"); // foo foo 整型+字符串参数123abc 9 } 10 } 11 12 class Aoo { 13 void foo() { 14 System.out.println("foo 无参"); 15 } 16 17 void foo(int num) { 18 System.out.println("foo 整型参数" + num); 19 } 20 21 void foo(String str) { 22 System.out.println("foo 字符串参数" + str); 23 } 24 25 void foo(String str, int num) { 26 System.out.println("foo 字符串+整型参数" + str + num); 27 } 28 29 void foo(int num, String str) { 30 System.out.println("foo 整型+字符串参数" + num + str); 31 } 32 }
重载规则:
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
- (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
- (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
- (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
重载和重写可以用下面这张图来形象的表示。重载我们可以认为是多种表现形式,每种表现形式都能实现自己的功能。重写是在原有基础上加强自己的功能。
内容总结
以上是互联网集市为您收集整理的Java 从入门到进阶之路(十一)全部内容,希望文章能够帮你解决Java 从入门到进阶之路(十一)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。