栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day18 Java学习之面向对象继承思想

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day18 Java学习之面向对象继承思想

目录

一、什么是继承?

二、继承的作用及优缺点:

继承的作用:

继承的优缺点: 

继承的图形举例如下:例如图形类与下列各类图形

 三、继承的语法定义:

继承语法格式如下:

Java是单继承:

 四、方法重写

方法重写的概述:

方法重写的格式:

五、super关键字与继承关系中构造方法的执行先后问题?

什么是super关键字及功能?

 举例说明

this与super关键字的区别


一、什么是继承?

解析:1.继承是面向对象的三大特征之一。

2.继承是一种关系,就行两类之间的关系,至少有两个类。通说来说就像是子承父业。

3.继承就是一个类A继承了另一个类B的所有成员,并且能够访问使用那些非私有成员。

4.Java中的继承就是在已经存在类的基础上进行扩展,从而产生新的类。已经存在的类称为父类、基类或超类,而新产生的类称为子类或派生类。

5.在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法。

二、继承的作用及优缺点:
  • 继承的作用:

解析:1.继承的一个很重要的意义就是能够减少代码的冗余

2.继承和现实生活中的“继承”的相似之处是保留一些父辈的特性,从而减少代码冗余,提高程序运行效率。

  • 继承的优缺点: 

解析:优点:

  1. 实现代码共享,减少创建类的工作量,使子类可以拥有父类的方法和属性。
  2. 提高代码维护性和可重用性。
  3. 提高代码的可扩展性,更好的实现父类的方法。

缺点:

  1. 继承是侵入性的。只要继承,就必须拥有父类的属性和方法。
  2. 降低代码灵活性。子类拥有父类的属性和方法后多了些约束。
  3. 增强代码耦合性(开发项目的原则为高内聚低耦合)。当父类的常量、变量和方法被修改时,需要考虑子类的修改,有可能会导致大段的代码需要重构。
  • 继承的图形举例如下:例如图形类与下列各类图形

​

 三、继承的语法定义:
  • 继承语法格式如下:

public class Father{
}
public class Son extends Father{// 基于类Father已有成分的基础上扩展出Son这个子类
}

特别注意:Java 语言摒弃了 C++ 中难以理解的多继承特征,即 Java 不支持多继承,只允许一个类直接继承另一个类,即子类只能有一个直接父类,extends 关键字后面只能有一个类名。

  • Java是单继承:

Java单继承解析:

很多地方在介绍 Java 的单继承时,可能会说 Java 类只能有一个父类,严格来讲,这种说法是错误的,应该是一个类只能有一个直接父类,但是它可以有多个间接的父类。

举例如下:三角形类继承多边形类,多边形类继承图形类,那么图形类是三角形的间接父类。下图 展示了单继承的关系。
​ 

 四、方法重写
  • 方法重写的概述:

解析:1.当父类继承下来的方法不满足子类需要的时候,可以写一个和父类声明一样的方法,方法体中逻辑重新实现,这个子类重新定义的方法就是重写后的方法。

2.重写后的方法会覆盖父类的功能,因此成为方法重写,也就是方法的覆盖。

3.当我们要重写父类的一个方法时,一般的做法就是定义一个声明一样的方法,方法体逻辑重写。简而意之,声明不变,重新实现

 注意:与方法的重载不同,方法重载在同一个类中进行,而方法重写是在非本类中进行。

  • 方法重写的格式:

声明:作用域修饰符 静态关键字 返回值类型 方法名 (参数列表) {

方法体;
}

// 其中方法体必须和父类不一致!

 注意事项:子类方法覆盖父类方法,必须要保证**权限大于等于父类权限** 其中权限是指作用域修饰符

举例如下:

父类:

public class Father {
   
    public void show(){
        System.out.println("我是父类的方法");
    }
  
}

子类:其中子类的作用域修饰符必须要保证权限大于等于父类权限,否则不会通过编译

public class Son extends Father{
    // 子类的重写父类的方法
    public void show(){
        System.out.println("我是子类的方法");
    }
}

五、super关键字与继承关系中构造方法的执行先后问题?
  • 什么是super关键字及功能?

解析:就是可以用来访问父类的构造方法、普通方法和属性。

  •  举例说明

为了验证super关键字与继承关系中构造方法的执行先后问题举例如下:

父类:

package com.feisi.week2.day4;


public class Father {
    // 父类的成员变量
    int num1 = 100;

    // 父类构造方法
    public Father() {
        System.out.println("我是父类的构造方法");
    }

    // 父类普通方法
    public void show(){
        System.out.println("我是父类的普通方法");
    }
}

子类:

package com.feisi.week2.day4;


public class Son extends Father{
    // 子类成员变量
    int num1 = 150;

    // 子类的构造方法
    public Son() {
        System.out.println("我是子类的构造方法");
    }

    // 子类的重写父类的普通方法
    public void show(){
        // 子类局部变量
        int num1 = 200;
        System.out.println(num1);// 就近原则输出子类局部变量
        System.out.println(this.num1);// 使用this关键字输出子类的成员变量
        System.out.println(super.num1);// 使用super关键字输出父类的成员变量
        System.out.println("我是子类的普通方法");
    }
  
}

测试类:

package com.feisi.week2.day4;


public class Test2 {
    public static void main(String[] args) {
        // 创建子类对象
        Son son = new Son();

        // 测试
        son.show();

    }
}

运行结果:由此 结果不难看出父类构造方法比子类构造方法先执行,且使用super关键字可以调用父类成员变量

  • this与super关键字的区别

1.this与super的简述:this 指的是当前对象的引用,super 是当前对象的父对象的引用。

2.简单介绍一下 super 和 this 关键字的用法:

super 关键字的用法:

  1. super.父类属性名:调用父类中的属性
  2. super.父类方法名:调用父类中的方法
  3. super():调用父类的无参构造方法
  4. super(参数):调用父类的有参构造方法

 this 关键字的用法:

  1. this.属性名:表示当前对象的属性
  2. this.方法名(参数):表示调用当前对象的方法
  3. 当局部变量和成员变量发生冲突时,使用this进行区分

3. 关于 Java super 和 this 关键字的异同,可简单总结为以下几条:

  1. 子类和父类中变量或方法名称相同时,用 super 关键字来访问。可以理解为 super 是指向自己父类对象的一个指针。在子类中调用父类的构造方法。
  2. this 是自身的一个对象,代表对象本身,可以理解为 this 是指向对象本身的一个指针。在同一个类中调用其它方法。
  3. this 和 super 不能同时出现在一个构造方法里面,因为 this 必然会调用其它的构造方法,其它的构造方法中肯定会有 super 语句的存在,所以在同一个构造方法里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  4. this( ) 和 super( ) 都指的是对象,所以,均不可以在 static 环境中使用,包括 static 变量、static 方法和 static 语句块。
  5. 从本质上讲,this 是一个指向对象本身的指针, 然而 super 是一个 Java 关键字。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号