当前位置: 首页 > news >正文

一个小时搞定JAVA面向对象(4)——继承

文章目录

  • 继承
      • 继承中,成员变量和成员方法的访问特点
        • 当子类和父类的成员变量不重名:
        • 当子类和父类的成员变量重名:
      • 成员方法
      • 方法的重写
        • 方法重写注意事项
    • final、Supre和this关键字
      • final关键字
        • final关键字修饰变量
        • final关键字修饰方法
      • super的使用方法
      • this的使用方法
      • 继承的特点

继承

继承格式:子类 extends 父类

注意要点:

  • 子类可以继承父类中的是私有和非私有成员,但是不能使用父类中的私有成员
  • 构造方法不能继承

继承中,成员变量和成员方法的访问特点

当子类和父类的成员变量不重名:

总结:**看等号左边是谁,先调用谁中的成员 .**如果等号左边是父类类型,只能调用父类中的成员变量,如果等号左边是子类类型,既能调用子类的,还能调用父类中继承过来的非私有成员.

当子类和父类的成员变量重名:

总结:看等号左边是谁,先调用谁中的成员,子类没有,找父类

成员方法

成员方法:看new的是谁,就行调用谁中的方法,子类没有,就找父类.

总结:

成员变量的访问特点:看等号左边是谁,先调用谁中的成员变量.

成员方法的访问特点:看new的是谁,就先调用谁中的方法.

方法的重写

概述:子类中有一个和父类方法名以及参数列表相同的方法

访问要求:看new的是谁,就先调用谁中的.如果new的是子类,调用子类重写的的方法,子类没有这个方法的话,就往父类找.

检测是否重写方法的注解:@Override

方法重写注意事项
  1. 子类重写父类方法的权限必须要大于等于父类权限
  2. 子类方法重写父类方法,方法名和参数列表一样
  3. 私有方法\构造方法\静态方法 不能被重写
  4. 子类重写父类方法之后,返回值类型应该是父类方法返回值类型的子类类型???

方法重写的使用场景:功能改造,子类需要对父类中已经实现好的功能进行重写改造的时候使用.

final、Supre和this关键字

final关键字

final关键字是最终的意思,可以修饰类,变量和方法.

  1. 修饰类:该类就不能被继承
  2. 修饰变量:变量会变为常量,只能赋值一次,之后就不能改变了.final修饰的变量被称为常量.[常量名我们奋斗史大写的,常量一般我们会声明为static]
final关键字修饰变量
  1. 成员变量:在定义的同时必须给出初始值
  2. 局部变量:可以在使用之前赋值
final关键字修饰方法

final修饰的方法,子类是不能重写该方法的!

super的使用方法

概述:super代表的就是父类的引用,作用是调用父类中的成员

使用方法:

a.调用父类构造方法-> 在子类中的构造中写

  • super() -> 调用父类无参构造

  • super(实参) -> 调用父类有参构造

    b.调用父类成员变量:

  • super.成员变量名

    c.调用父类成员方法:

  • super.成员方法名(实参)

//案例理解
public class Fu {int num = 10;public Fu(){System.out.println("我是父类中的无参构造");}public Fu(int data){System.out.println("我是父类中的有参构造");}public void method(){System.out.println("我是父类中的method方法");}
}
//===================================================
public class Zi extends Fu{int num = 100;public Zi(){super();//调用父类中的无参构造System.out.println("我是子类中的无参构造");}public Zi(int num){super(10);//调用父类的有参构造System.out.println("我是子类中的有参构造");}public void method(){super.method();//调用父类的method方法System.out.println("我是子类中的method方法");System.out.println(num);//子类自己的System.out.println(super.num);//调用父类的num}
}
//==================================
public class Test01 {public static void main(String[] args) {Zi zi = new Zi();System.out.println("============");Zi zi1 = new Zi(10);System.out.println("============");Zi zi2 = new Zi();zi2.method();}
}

每个构造方法的第一行默认都会有一个Super( ),不写jvm会自动提供一个super()代表父类无参构造.

//案例理解
public class Fu {	//父类public Fu(){System.out.println("我是父类中的无参构造");}
}
public class Zi extends Fu{	//子类public Zi(){//super();System.out.println("我是子类中的无参构造");}public Zi(int i){//super();System.out.println("我是子类中的有参构造");}
}public class Test {public static void main(String[] args) {Zi zi = new Zi();System.out.println("===========");Zi zi1 = new Zi(10);}
}

this的使用方法

概述:代表的是当前对象(哪个对象调用的this所在的方法,this就代表哪个对象)

作用:

  1. 区分重名的成员变量和局部变量
  2. 调用当前对象中的成员

使用方法:

a.调用当前对象的构造:在构造中写

  • this():调用当前对象的无参构造

  • this(实参):调用当前对象的有参构造

    b.调用当前对象的成员变量:

  • ​ this.成员变量名

    c.调用当前对象的成员方法:

  • ​ this.成员方法名(实参)

//案例理解
public class Person {int num = 10;public Person(){//this(10);System.out.println("我是Person中的无参构造");}public Person(int data){//super();super和this不能同时再构造中出现this();System.out.println("我是Person中的有参构造");}public void method(){int num = 20;System.out.println(num);//20System.out.println(this.num);//10this.method01();System.out.println("我是Person类中的method方法");}public void method01(){System.out.println("我是Person类中的method01方法");}
}
//=======================================
public class Test01 {public static void main(String[] args) {Person person = new Person();System.out.println("========");Person person1 = new Person(10);System.out.println("========");Person person2 = new Person();person2.method();}
}

继承的特点

1.继承只支持单继承,不能多继承public class A extends B,C{}  -> 错误
2.继承支持多层继承public class A extends B{}public class B extends C{}
3.一个父类可以有多个子类public class A extends C{}public class B extends C{}4.构造方法不能继承,也不能重写私有方法可以继承,但是不能被重写静态方法可以继承,但是不能被重写

相关文章:

  • LeetCode-239.滑动窗口最大值
  • 用增之Google
  • 24、Linux网络端口
  • 详解redis配置文件
  • SQL常用语句--模糊查询LIKE
  • Android 编译 C 文件报错 fatal error: ‘jni.h‘ file not found
  • 网络安全中攻击溯源方法
  • 对人脸图像进行性别和年龄的判断
  • 结构体指针
  • 【Java高级教程】集合部分
  • 【Qt快速入门(一)】- Qt简介
  • 用Python获取Windows本机安装的所有应用程序的实现与分析
  • npm镜像源管理、nvm安装多版本node异常处理
  • 【算法实战】每日一题:17.1 订单处理问题(差分思想,二分搜索)
  • 【数据库系统概论】数据库设计过程
  • 0x05 Python数据分析,Anaconda八斩刀
  • Fabric架构演变之路
  • Java知识点总结(JavaIO-打印流)
  • Js基础——数据类型之Null和Undefined
  • MySQL QA
  • MySQL数据库运维之数据恢复
  • mysql外键的使用
  • Object.assign方法不能实现深复制
  • React+TypeScript入门
  • sessionStorage和localStorage
  • Terraform入门 - 1. 安装Terraform
  • use Google search engine
  • vue--为什么data属性必须是一个函数
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于 Cirru Editor 存储格式
  • 关于for循环的简单归纳
  • 前端面试之闭包
  • 区块链分支循环
  • 阿里云服务器购买完整流程
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • (多级缓存)缓存同步
  • (二)linux使用docker容器运行mysql
  • (二)原生js案例之数码时钟计时
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十六)串口UART
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)大道至简,职场上做人做事做管理
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .bat文件调用java类的main方法
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Remoting常用部署结构
  • .NET/C# 使窗口永不获得焦点
  • .NET文档生成工具ADB使用图文教程
  • // an array of int
  • /usr/bin/env: node: No such file or directory
  • @取消转义
  • [] 与 [[]], -gt 与 > 的比较