【韩顺平Java笔记】第8章:面向对象编程(中级部分)【297-313】

server/2024/10/11 0:01:55/

文章目录

  • 297. super基本语法
    • 297.1 基本介绍
    • 297.2 基本语法
  • 298. super使用细节1
  • 299. super使用细节2
  • 300. super使用细节3
  • 301. 方法重写介绍
  • 302. 方法重写细节
  • 303. 重写课堂练习1
  • 304. 重写课堂练习2
  • 输出结果: 姓名:田所浩二 年龄:24
  • 305. 养宠物引出多态
  • 306. 方法的多态
  • 307. 对象的多态
  • 308. 多态快速入门
  • 309. 向上转型
  • 310. 向下转型
  • 311. 属性重写问题
  • 312. 多态课堂练习1
  • 313. 多态课堂练习2

297. super基本语法

297.1 基本介绍

super 代表父类的引用,用于访问父类的属性、方法、构造器

297.2 基本语法

298. super使用细节1

  1. 调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super. 如果没有重名,使用super、this、直接访问是一样的效果。


    子类父类成员和方法不重名,则直接调用:

    属性也是遵循上述规则

299. super使用细节2


也就是说父类没有但是父类的父类有的成员,在这个子类中也能用super关键字访问。

300. super使用细节3

  • super和this的比较

    this和super放在首行只能二选一

301. 方法重写介绍


【注】这里的子类和父类不一定是“一层”的关系,有可能是A<-B<-C


JVM会就近调用子类的cry()方法

302. 方法重写细节

方法重写也叫方法覆盖,需要满足下面的条件

303. 重写课堂练习1

请对方法的重写和重载做一个比较

304. 重写课堂练习2

  1. 编写一个 Person 类,包括属性/private(name、age),构造器、方法 say(返回自我介绍的字符串)。
  2. 编写一个 Student 类,继承 Person 类,增加 id、score 属性/private,以及构造器,定义 say 方法(返回自我介绍的信息)。
  3. 在 main 中,分别创建 Person 和 Student 对象,调用 say 方法输出自我介绍
    Person.java
java">package com.Marisa.overrideexe;public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}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;}//say输出个人信息public void say(){System.out.println("姓名:" + name);System.out.println("年龄:" + age);}
}

Student.java

java">package com.Marisa.overrideexe;public class Student extends Person{private int id;private double score;public Student(String name, int age, int id, double score) {super(name, age);this.id = id;this.score = score;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}//say输出信息public void say(){super.say();System.out.println("id:" + id);System.out.println("分数:" + score);}
}

OverrideExercise.java

java">package com.Marisa.overrideexe;import com.Marisa.overrideexe.Student;public class OverrideExercise {public static void main(String[] args) {Person person = new Person("田所浩二", 24);Student student = new Student("德川", 26, 114514, 114514.1919);person.say();System.out.println("==============");student.say();}
}

输出结果:
姓名:田所浩二
年龄:24

姓名:德川
年龄:26
id:114514
分数:114514.1919

305. 养宠物引出多态


传统方法写7个类:


如果再写猫喂鱼,又要重载一个方法,feed的类型越来越多,一直写重载,很繁琐,多态可以提高代码的复用性。

306. 方法的多态

方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

307. 对象的多态



【注】也就是说,能够用一个父类的引用指向子类的对象。
Animal.java

java">package com.Marisa.objectpoly_;public class Animal {public void cry(){System.out.println("动物在叫");}
}

Cat.java

java">package com.Marisa.objectpoly_;public class Cat extends Animal{public void cry() {System.out.println("Cat cry() ");}
}

Dog.java

java">package com.Marisa.objectpoly_;public class Dog extends Animal{public void cry() {System.out.println("Dog cry()");}
}

PolyObject.java

java">package com.Marisa.objectpoly_;public class PolyObject {public static void main(String[] args) {//多态的特点Animal animal = new Dog();animal.cry();//因为运行时,animal运行类型是Dog,所以cry就是Dog的cryanimal = new Cat();animal.cry();}
}

运行结果:
Dog cry()
Cat cry()

308. 多态快速入门


利用多态的机制,父类的引用可以指向子类

309. 向上转型

多态的前提是:两个对象(类)存在继承关系
多态的向上转型






310. 向下转型



311. 属性重写问题





312. 多态课堂练习1

313. 多态课堂练习2

s和b都是引用,都指向同一个地址

this是先就近查找,如果没用再查父类


http://www.ppmy.cn/server/129856.html

相关文章

国庆作业

day1 1.开发环境 Linux系统GCCFDBmakefilesqlite3 2.功能描述 项目功能: 服务器&#xff1a;处理客户端的请求&#xff0c;并将数据存入数据库中&#xff0c;客户端请求的数据从数据库进行获取&#xff0c;服务器转发给客户端。 用户客户端&#xff1a;实现账号的注册、登…

电商序列推荐算法

基本思路&#xff1a; 任务描述&#xff1a;针对Amazon和淘宝百万级用户点击、购买数据&#xff0c;采用多行为路径联合建模&#xff0c;预测用户感兴趣商品。 个人工作&#xff1a;&#xff08;1&#xff09;特征工程&#xff1a;对点击、购买数据进行跨场景融合&#xff0c…

Docker 的数据管理

一、容器中数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;同时数据卷是宿主机中的…

WordPress修改固定链接后301的重定向方法

网站改版实际上是很忌讳的&#xff0c;尤其是针对已被搜索引擎收录的网站&#xff0c;新站不用考虑这些问题&#xff0c;而已经收录的网站网页在不遵守搜索引擎规则的前提下&#xff0c;是会被降权&#xff0c;关键词排名下滑、流量IP会被剥夺、收录会减少 、业务成交量会急剧下…

ChatGPT国内中文版镜像网站整理合集(2024/10/06)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1&#xff0c;支持MJ绘画 ② chat.lify.vip 支持通用全模型&#xff0c;支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4&#xff0c;4o以及MJ绘画 1. 什么是镜像站 镜像站&#xff08;Mirror Site&#xff…

Mac电脑word文档误删,4个方法快速恢复

对于使用Mac的用户来说&#xff0c;丢失重要的Word文档可能会为学习或工作带来严重的影响。不过&#xff0c;幸运的是&#xff0c;关于mac word 文档恢复方法还是有很多的&#xff0c;通常帮助Mac用户轻松找回丢失的word文档。接下来&#xff0c;小编将介绍一些在Mac上恢复丢失…

免费简洁的程序员画图工具:Pollyoyo

作为一名程序员&#xff0c;我经常会画一些图&#xff0c;如技术方案中必不可少的流程图、时序图和架构图。这些图片可以让我更好的思考&#xff0c;并且在团队中进行高效交流。 图片是一种表达方式。 目前互联网上有很多绘图的工具&#xff0c;如&#xff1a; DrawioExcalidr…

使用 Spring Boot 在电商平台中动态调整促销信息

业务背景 在电商平台上&#xff0c;促销活动是吸引用户的重要手段之一。然而&#xff0c;促销活动的状态&#xff08;如开始、结束&#xff09;可能会频繁变化&#xff0c;而这些变化需要实时反映在商品详情页上。如果每次促销状态改变都需要重新部署应用或者手动更改代码&…