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

02 面向对象( 继承,抽象类)

强调:一定用自己的话总结,避免抄文档,否则视为作业未完成。

this关键字的作用

为了解决成员变量和局部变量所存在的二义性,适用于有参构造时使用

示例

private String name;private int age;public person(){}public person(String name,int age){this.name =name;//不使用this关键字的话,他的值就是默认值this.age =age;}

为成员变量设置值, 构造器和setter方法的选择,为什么?

构造器:在知道具体的参数的时候可以使用,可以创建对象并做初始化,只能使用一次

setter方法:在不知道有具体参数的时候使用,在创建对象后再使用getter方法进行调用,可以多次使用

示例:

public class person {private String name;private int age;public person(){}//无参构造器,添加有参构造器时必须写public person(String name,int age){//有参构造器this.name =name;this.age =age;}//getter和setter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void p(){System.out.println("名字:"+name+",年龄:"+age);}

为什么需要继承?

解决多个类中存在有相同的字段和方法的重复问题

Java中的继承语法

继承时候使用extends关键字

public class 父类名{//父类,可以编写多个不同类中相同的字段名// 存放多个子类共同的字段和方法
}public class 子类名 extends 父类名{// 存放自己特有的(独有的)字段和方法
}

子类能从父类中继承到哪些成员?

1.public修饰的成员都可以被子类继承
2.private 修饰的成员子类不能继承

3.protected修饰的成员所有的子类都可以继承,专门提供给子类使用

4.默认的关键字只能是在同包下面可以被子类继承

5.有参构造器和无参构造器不能被继承

注意:java只支持单继承,也支持多重继承,不支持多继承

继承有一个根类:Objiect

子类什么时候需要覆盖父类中的方法,方法重写?(override)

在子类中添加一个 和父类一模一样的方法

//执行顺序:
//1. 先找自己是否有对应的方法,没有就找父类的
//2.找父类中是否存在该方法,如果有就执行,否则继续找
//3.知道找到objiect类,如果也没有就报错

方法覆盖的规则

private修饰的方法不能被子类所继承

  1. 实例方法签名必须相同 (方法签名= 方法名 + 方法的参数列表)
  2. 子类方法的返回值类型是和父类方法的返回类型相同或者是其子类
  3. 子类方法的访问权限比父类方法访问权限更大或相等
    • 如果父类方法是private,子类方法不能重写。==> 重写建立在继承的基础上,没有继承,就不能重写。

super关键字的作用

在子类中的父类方法被覆盖了,但任然需要父类中方法的东西就需要使用super关键字

示例

public class Ostrich extends Bird {public void fly() {System.out.println("自由奔跑");}//在子类中,如何调用父类中的方法public void doWork(){fly();//调用自己的fly方法//直接调用父类中的方法//super指向父类对象,只能找到直接父类super.fly();}

什么时候需要把父类中的方法定义成抽象方法?

子类必须要覆盖父类中的某一个方法的时候

使用abstract修饰的方法,称为抽象方法。 0

public abstract 返回类型 方法名(参数);

抽象方法的特点:

  • 使用abstract修饰,没有方法体,留给子类去覆盖

  • 抽象方法必须定义在抽象类或接口中

使用abstract修饰的类,成为抽象类。/

public abstract class 类名{}

抽象类应该怎么使用?可以直接使用抽象类创建对象吗?

1.抽象类不可以创建对象,语法不支持

2.抽象类中可以同时拥有抽象方法和普通方法

3.抽象类必须要有子类,并且子类必须覆盖父类的抽象方法,否则该抽象类没有意义,或者子类也是抽象类(可以不覆盖)

抽象类的意义是什么?

必须要有子类来进行继承,子类必须覆盖父类的抽象方法,除非子类也是一个抽象类就不用覆盖

Objiect中的equals和toString关键字

1.equals:

示例:

public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}//重写父类中的equals@Overridepublic boolean equals(Object o) {if (this == o) return true;//地址相同就是同一个对象//o为null或者两个对象的类型不同,则不是同一个对象if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;//若果年龄相同并且姓名的值相同则表示同一个对象return age == student.age && Objects.equals(name, student.name);}//省略setter方法
public static void main(String[] args) {Student s1=new Student("国辉",23);Student s2=new Student("国辉",23);//==,基本数据类型比较值,引用类型比较值System.out.println(s1 == s2);//false//objiect类中的eqauls方法比较两个对象的地址,作用和"=="相同//在Student类中重写equals方法之后,此时比较两个对象的值是否相同System.out.println(s1.equals(s2));//true}
2.toString

示例:

public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}//重写toString@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}//省略setter方法
 public static void main(String[] args) {Student s1=new Student("国辉",23);//cn.wolfcode._07_objiect.Student:全限定名//@157f12c:地址//objiect类中的toString://重写objiect的toString方法,打印对象的字段值System.out.println(s1.toString());//不具有打印功能,只做字符串转换System.out.println(s1);}

http://www.lryc.cn/news/69828.html

相关文章:

  • [C++]22种设计模式的C++实现大纲
  • 用Powerpoint (PPT)制作并导出矢量图、高分辨率图
  • 小白量化《穿云箭集群量化》(9)用指标公式实现miniQMT全自动交易
  • java Class类详解
  • DMGI:Unsupervised Attributed Multiplex Network Embedding
  • C++基本介绍
  • 如何理解工业互联网与智能制造,怎么共建智慧工厂?
  • 主机访问不到虚拟机(centos7)web服务的解决办法
  • 第四章 ActiveMQ与SpringBoot集成——ActiveMQ笔记(动力节点)
  • Halcon 算子 select_shape_std 和 select_shape_xld区别
  • 【Java基础】匿名内部类
  • 基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器
  • C++——模板初阶
  • 【TOOLS: Linux与windows及linux与linux之间文件传输常用方法及命令】
  • 【博览群书】《实战大数据》——属于我的第一本大数据图书
  • 【计算机组成原理】实验二
  • hive数据库hql基础操作02
  • 门电路OD门
  • 没有域名,一个服务器Nginx怎么部署多个前端项目
  • 城市内涝的原因和解决措施,内涝监测预警助力城市防涝度汛
  • 8年测试总结,性能测试问题大全,这些问题你应该认清的...
  • RabbitMQ集群安装
  • 面试:link和@import的区别
  • 图片隐写(一)
  • Vivado 下 IP核 之ROM 读写
  • 朗诵素材-《诵四季诗韵,咏师恩师德》
  • CHB-麻省理工学院头皮脑电图数据库
  • 传输层协议
  • 公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......
  • pytorch rpc如何实现分物理机器的model parallel