1.java继承

1.1概念

  • 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
  • 继承可以使用extendsimplements这两个关键字来实现继承,而且所有的类都是继承于java.lang.Object,当一个类没有继承的两个关键字, 则默认继承object (这个类在java.lang包中,所以不需要import)祖先类。

1.2继承的特性

  • 子类拥有父类非private的属性、方法。
  • 子类可以拥有自己的属性和方法。即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一 个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是Java继承区别于C++继承的一个特性。
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)

1.3格式

1 class 父类{
2 }
3 class 子类 extends 父类{
4 }

1.4实例

1.4.1extends关键字

在Java中,类的继承是单一继承, 也就是说,一个子类只能拥有一个父类, 所以extends只能继承一个类。

 1 public class Animal {
2 private String name ;
3 private int id:
4 public Animal() {}
5 public Animal (String myName,int myid) {
6 //初始化属性值.
7 }
8 public void eat() { //吃东西方法的具体实现 }
9 public void sleep() { //睡觉方法的具体实观}
10 }
11
12 public class Penguin extends Animal {
13 }
14
1.4.2implements关键字

使用implements关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔,下面例子中的A与B)。

 1 public interface A {
2 public void eat() ;
3 public void sleep() ;
4 }
5 public interface B {
6 public void show() ;
7 }
8 public class C implements A, B{
9 public void eat() {}
10 public void sleep() {}
11 public void show() {}
12 }
1.4.3super与this关键字

super关键字 : 我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字 : 指向自己的引用。

 1 class Animal {
2 void eat() {
3 System.out.println(" animal : eat");
4 }
5 }
6 class Dog extends Animal {
7 void eat() {
8 System.out.println(" dog : eat");
9 }
10 void eatTest() {
11 this.eat(); // this 调用自己的方法.
12 super.eat(); // super 调用父类方法
13 }
14 }
15 Animal a = new Animal();
16 a.eat();
17 Dogd = new Dog();
18 d.eatTest();
19
1.4.4构造器
  • 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在F类的构造器中显式地通过super 关键字调用父类的构造器并配以适当的参数列表。
  • 如果父类构造器没有参数,则在子类的构造器中不需要使用super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
 1 class SuperC1ass {
2 private int n;
3 SuperClass() {
4 System.out.println("SuperClass()");
5 }
6 SuperClass(int n) {
7 System.out.println("SuperClass(int n)");
8 this.n = n;
9 }
10 }
11 // SubClass1类继承
12 class SubClass1 extends SuperClass {
13 private int n;
14 SubClass1(){ //自动调用父类的无参数构造器
15 System.out.println("SubClass1");
16 }
17 public SubClass1(int n) {
18 super(300); //{ 调用父类中带有参数的构造器
19 System.out.println(”SubClass1(int n):" +n);
20 this.n = n;
21 }
22 }
23 // SubClass2类继承
24 class SubClass2 extends SuperClass {
25 private int n;
26 SubClass2() {
27 super(300); //{ 调用父类中带有参数的构造器
28 System.out.println("SubClass2");
29 }
30 public SubClass2(int n){ //自动调用父类的无参数构造器
31 System.out.println("SubClass2(int n):" +n);
32 this.n= n
33 }
34 }
35 System.out.println("-----SubClass类继承-----");
36 SubClass1 sc1 = new SubClass1();
37 SubClass1 sc2 = new SubClass1(100);
38 System.out.println("-----SubC1ass2类继------");
39 SubClass2 sc3 = new SubClass2();
40 SubClass2 sc4 = new SubClass (200);

2.重写(Override)与重载(Overload)

2.1重写规则

  • 参数列表必须完全与被重写方法的相同。
  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5及更早版本返回类型要-样, java7 及更高版本可以不同)。
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public, 那么在子类中重写该方法就不能声明为protected.
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是.重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法。

2.2重载规则

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型:
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个 子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

2.3重写与重载的区别

 区别点 重载方法  重写方法 
 参数列表  必须修改  一定不能修改
 返回类型  可以修改   一定不能修改
 异常  可以修改 可以减少删除,一定不能抛出新的或者更广的异常
 访问  可以修改  一定不能做更严格的限制(可以降低限制)

2.4.1重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改
变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据
需要实现父类的方法。

 1 class Animal {
2 public void move() {
3 System.out.println("动物可以移动");
4 }
5 }
6
7 class Dog extends Animal {
8 public void move() {
9 System. out. print1n("狗可以跑和走");
10 }
11 }
12 Animal a = new Animal(); // Animal对象
13 a.move(); //执行Animal类的方法
14
15 Animal b = new Dog(); //Dog对象
16 b.move(); //执行Dog类的方法
17

2.4.2重载

重载(overloading)是在一个类里面, 方法名字相同,而参数不同。返回类型可以相同
也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一 无的参数类型列表。
最常用的地方就是构造器的重载。

 1 public class Overloading {
2 public int test() {
3 System.out.println("test1");
4 return 1;
5 }
6 public void test(int a) {
7 System.out.println("test2");
8 }
9 //以下两个参数类型顺序不同
10 public String test(int a, String s) {
11 System.out.println("test3");
12 return "returntest3";
13 }
14 public String test (String s, int a) {
15 System.out.println(" test4");
16 return "returntest4";
17 }
18 }
19 Overloading o = new overloading();
20 System.out.println(o.test()) ;
21 o.test(1);
22 System.out.println(o.test(1,"test3"));
23 System.out.println(o.test("test4",1));
24

Java继承、重写与重载的更多相关文章

  1. [转帖]Java中重写和重载与多态的关系

    Java中重写和重载与多态的关系 2019-09-05 00:57:41 留下一天今天 阅读数 67  收藏 更多 分类专栏: java进阶之路   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  2. 在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. java知识点--重写与重载

    重载(Overload): (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现.      ...

  4. Java中重写与重载的辨析

    摘要:在我们学习Java过程中,重写与重载使我们在面向对象里要学习的重要知识点之一,那我们看看它们有那些区别: 一.重写 1.概念:简单的说就是子类将从父类继承而来的方法重新实现一次. 2.特点: ① ...

  5. Java:Java的重写与重载区分

    最明显的区别为:重写只存在于子类与父类中,重载存在于一个类中. 具体区别如下: 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重 ...

  6. Java 方法重写方法重载

    1,方法的重载和方法的重写 方法名相同形参列表不通 方法名字的重新定义2,面向过程是分步骤解决问题 用方法组织代码 面向对象是以分类的方式解决问题 用类住址代码3 类是对对象的抽象 对象万事万物都是对 ...

  7. 浅谈Java中重写与重载的区别

    重载和重写是Java中两个截然不同的概念.但是却因为名字相近导致很多人经常混淆. 下面用例子展示出他们之间的区别. 在Java中,重载(overloading) 发生在本类.方法名相同,参数列表不同, ...

  8. Java中重写与重载的区别

    方法重载:关键字overload,方法名和方法的返回类型都相同,方法参数个数和类型不一样方法重写:也叫方法覆盖,关键字override,相对于类继承而言,重写的方法名,返回类型,参数个数,参数类型都要 ...

  9. java继承-重写-super实例补充

    方法重写: 是指子类根据需要父类继承来的方法进行改写,是多态机制的前奏. 重写注意点: 1.重写方法必须和被重写方法具有相同的方法名,参数列表和返回值. 2.重写方法方法不能使用比被重写方法更严格的访 ...

  10. java的重写、重载、覆盖的差别

    多态性  通过继承,一个类能够用作多种类型:能够用作它自己的类型.不论什么基类型,或者在实现接口时用作不论什么接口类型.这称为多态性  重载  每一个类型成员都有一个唯一的签名.方法签名由方法名称和一 ...

随机推荐

  1. 致敬mentohust,路由器使用Socket认证华科校园网

    致敬mentohust,路由器使用Socket认证华科校园网 前言: 上一篇文章中,为了解决ESP32华科无线网认证的问题,我成功把网页认证机制用Python+Socket复现.但痛点依然存在,无线网 ...

  2. Defence

      emm...这道题我调了一下午你敢信??   好吧还是我太天真了.   开始的时候以为自己线段树动态开点与合并写错了,就调;   结果发现没问题,那就是信息维护错了.   一开始以为自己最左右的1 ...

  3. ARP原理和常见分类

    路由器一个重要功能是隔离广播域.就是不转发广播包,而ARP请求就是个广播包===> arp 代理 1. ARP交互流程: (1)目的地址和主机在同一个网段(A-C): A ----------- ...

  4. JS013. 重写toFixed( )方法,toFixed()原理 - 四舍五入?银行家舍入法?No!六舍七允许四舍五入√!

    以下为场景实测与原理分析,需要重写函数请直接滚动至页尾!!! 语法 - Number.prototype.toFixed( ) // toFixed()方法 使用定点表示法来格式化一个数值. numO ...

  5. AtCoder Regular Contest 069 D - Menagerie 枚举起点 模拟递推

    arc069.contest.atcoder.jp/tasks/arc069_b 题意:一堆不明身份的动物排成一圈,身份可能是羊或狼,羊一定说实话,狼一定说假话.大家各自报自己的两边是同类还是不同类, ...

  6. PHP中使用PDO操作事务的一些小测试

    关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...

  7. nuxt.js同路由跳转参数不同,mounted不执行时

    watch: { '$route'(to, from) { if (to.fullPath !== from.fullPath) { this.$nextTick(() => { // 不加th ...

  8. win10系统移动热点使用技巧

    win10系统是自动移动热点功能,在平时测试的时候,有时需要进行手机抓包,需要手机和电脑处于同一网络当中,这时可以开启热点使用. 如何开启移动热点? 直接搜索"移动热点" 但是如果 ...

  9. jmeter之命令行执行jmx脚本

    使用界面执行不稳定,且保存报告非常麻烦 https://www.jb51.net/article/191367.htm 作者:Anthony_tester 来源:CSDN 原文:https://blo ...

  10. [转载]让你玩转代码的编辑神器phpstorm功能详解

    转载网址:http://wwwquan.com/show-66-121-1.html phpstorm包含了webstorm的全部功能,更能够支持php代码.PhpStorm是一个轻量级且便捷的PHP ...