Java两周半速成之路(第七天)

一.多态 

3.多态的好处:

                                 提高了程序的维护性(由继承保证)

                                 提高了程序的扩展性(由多态保证)

演示:

package com.shujia.day08;public class Animal {String name;int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println("吃饭");}public void sleep() {System.out.println("睡觉");}
}class Cat extends Animal {public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void sleep() {System.out.println("猫躺着睡");}public void youYong() {System.out.println("猫会游泳");}}class Tiger extends Animal {public Tiger() {}public Tiger(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("老虎吃肉");}@Overridepublic void sleep() {System.out.println("老虎趴着睡");}
}//创建工具类
class AnimalTool {/*构造工具类的两个条件:构造方法私有化成员方法必须是静态的*/public static void useAnimal( Animal animal){animal.sleep();animal.eat();}
}class Test1 {public static void main(String[] args) {Cat a1 = new Cat("xiaohua", 1);AnimalTool.useAnimal(a1);Tiger t1 = new Tiger("xiaohuang",3);AnimalTool.useAnimal(t1);}
}

4.多态的弊端:

                                 不能访问子类特有成员方法

解决方法:               多态中的转型

4.1   多态中的转型  

向下转型:父类引用转为子类对象

演示:

/*多态访问成员方法的弊端:无法访问子类中特有的成员方法向下转型:父类引用转为子类对象*/class Father{public Father() {}public void fun1(){System.out.println("100");}public void fun2(){System.out.println("200");}}
class Son extends Father{public Son() {}public void fun3(){System.out.println(300);}
}public class DuoTaidem2 {public static void main(String[] args) {Father f1 =new Son();         //   向上转型f1.fun1();f1.fun2();Son f2=(Son) f1;    //向下转型f2.fun3();      //300}
}

 二、抽象类

1.概述:

现实生活中,我们并不能找到一个具体的事物叫做动物,在现实生活中,动物本身其实是一个概念/集合,是一个抽象的东西 我们看不见摸不着。所以我们的程序中也不应该能够new出来,这就发生了程序和现实的冲突。 java为了更好的模拟现实生活,为了能够表示抽象的集合概念这样的思想,提供了一个关键字给我们使用:abstract

abstract:抽象的,可以修饰类,成员方法。

修饰类:类为抽象类,类无法new,无法被实例化(创建对象)

修饰方法:方法为抽象方法

2.注意事项:

1、抽象类无法被实例化,却可以在抽象类中编写构造方法,这里的构造方法意义是什么呢?

      答案:为了子类能够成功创建对象,要想初始化子类,必选初始化其直接父类。

2、被abstract关键字修饰的方法,不允许有方法体的实现,连大括号都不能有。

3、抽象方法的类必须是抽象class类,不能是具体的class类(如果一个类有抽象方法,这个类必须是抽象类)

4、抽象class类中既可以存在抽象方法,也可以存在具体的实现方法

5、当一个具体的class类继承一个抽象类的时候,必须要实现抽象类中的所有抽象方法 !!

6、抽象类与抽象类之间允许存在继承关系, 抽象类继承抽象类的时候,可以选择性地重写方法,也可以都不重写

 演示:


/*
2.注意事项:
1、抽象类无法被实例化,却可以在抽象类中编写构造方法,这里的构造方法意义是什么呢?
答案:为了子类能够成功创建对象,要想初始化子类,必选初始化其直接父类。
2、被abstract关键字修饰的方法,不允许有方法体的实现,连大括号都不能有。
3、抽象方法的类必须是抽象class类,不能是具体的class类(如果一个类有抽象方法,这个类必须是抽象类)
4、抽象class类中既可以存在抽象方法,也可以存在具体的实现方法
5、当一个具体的class类继承一个抽象类的时候,必须要实现抽象类中的所有抽象方法 !!
6、抽象类与抽象类之间允许存在继承关系, 抽象类继承抽象类的时候,可以选择性地重写方法,也可以都不重写*/abstract class Person{String naem;int age;String grade;public Person() {}public Person(String naem, int age, String grade) {this.naem = naem;this.age = age;this.grade = grade;}abstract void study();abstract void eat();public void fun1() {System.out.println("这是具体实现的方法fun");}}class Student extends Person {public Student() {}public Student(String naem, int age, String grade) {super(naem, age, grade);}@Overridevoid study(){System.out.println("学习");}@Overridevoid eat() {System.out.println("吃饭");}
}public class AbstractDemo1 {public static void main(String[] args) {Student s1 = new Student("小明",29,"三班");s1.eat();}
}

7.abstract不能和哪些关键字共存?

答案:   static无意义       final 冲突            private 冲突

演示:


/*1、一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义? 表示现实生活中的一种概念集合2、abstract不能和哪些关键字共存static 冲突final 冲突private 冲突*/abstract class Demo{
//    public abstract static void fun1(); // 非法的修饰符组合: abstract和static//    public abstract final void fun2(); // 非法的修饰符组合: abstract和final//    private abstract void fun3(); // 非法的修饰符组合: abstract和private
}public class AbstractDemo3 {public static void main(String[] args) {}
}

三、接口

1.概述:

java提供了一个关键字 interface表示一个接口,主要是为了扩展一个类的额外功能

2.使用接口的注意事项(一)

(1)接口可以被看作一个特殊的类,JVM也会把接口编译成一个class文件

(2)接口中只允许出现抽象方法,默认是抽象方法,默认会在方法的前面加上public abstract修饰符

(3)当一个具体的类实现一个接口的时候,必须要重写其中所有抽象方法

  (4) 在接口中,方法必须被定义为public或abstract形式,其他权限修饰符不被Java编译器认可。或者说,即使不将该方法声明为public形式了,他也是public形式。

3.使用接口的注意事项(二)

(1)抽象类也可以实现接口,但不是必须重写方法,可以选择性地重写

(2)接口中只允许常量出现,不允许出现变量,默认会在定义变量前面加上public static final

(3)一个类可以同时实现多个接口,接口之间使用英文逗号分割

(4)java允许一个类继承一个类的同时实现接口,可以实现多个接口

         举例: class A  extends  B  implements  Inter1,Inter2,...{ }

(5)接口与接口之间是继承关系,接口之间继承允许多继承

面试题:java语言中允许多继承吗?

类与类之间:不允许             接口与接口之间:允许

演示:

/*使用接口的注意事项(二):1、抽象类也可以实现接口,但是不是必须重写方法,可以选择性地重写2、接口中只允许常量出现,不允许出现变量,默认会在定义变量前面加上public static final3、一个类可以同时实现多个接口,接口之间使用英文逗号分割4、java允许一个类继承一个类的同时实现接口,可以实现多个接口class A extends B implements Inter1,[Inter2,...]{}5、接口与接口之间是继承关系,接口之间继承允许多继承(面试题:java语言中允许多继承吗?从类与类之间继承和接口与接口之间继承回答)*/
interface xuLian1 {int a=10;void daQiu1();void daQiu2();
}interface xuLian2 {void tiaoShui();void tiaoGao();
}abstract class Animal1 implements xuLian1 {abstract void eat();abstract void sleep();}class Cat1 extends Animal implements xuLian1, xuLian2 {           //java允许一个类继承一个类的同时实现接口,可以实现多个接口@Overridepublic void daQiu1() {System.out.println("打球1");}@Overridepublic void daQiu2() {System.out.println("打球2");}@Overridepublic void tiaoShui() {System.out.println("跳水");}@Overridepublic void tiaoGao() {System.out.println("跳高");}public void jump() {System.out.println("原地蹦");}
}public class JieKouDemo1 {public static void main(String[] args) {Cat1 c1 = new Cat1();c1.tiaoGao();System.out.println(c1.a);
//        a=20;                           // 接口中只允许常量出现,不允许出现变量,默认会在定义变量前面加上public static final,不可赋值
//        System.out.println(c1.a);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装/升级 gcc

文章目录 查看当前 gcc 版本查看 yum 软件库 gcc 版本列表下载最新版本安装 查看当前 gcc 版本 查看 yum 软件库 gcc 版本列表 只有一个4.8的版本,过旧 下载最新版本 wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz 安装 ./configure 报错 提示…

2024年Android开发者跳槽指南,超强Android进阶路线知识图谱

一、概述 随着业务的发展,工程的逐渐增大与开发人员增多,很多工程都走向了模块化、组件化、插件化道路,来方便大家的合作开发与降低业务之间的耦合度。现在就和大家谈谈模块化的交互问题,首先看下模块化的几个优势。 模块化的优…

国创证券|645元克!买还是不买?

近日世界金价继续走强。截至记者发稿,纽约商业交易所(COMEX)黄金主力4月合约突破2100美元/盎司关口;国内方面,SHFE黄金主力合约则摸高498元/克,迫临500元/克的关口。 巨丰投顾高级出资参谋游晓刚对《证券日…

替代TPS7B7701QPWPRQ1/TPS7B7702QPWPRQ1单/双通道 车规级LDO

PC8803具有高输入电压单低压差调节器(PC8803SC01/PC8803SCO3)/双通道低压差调节(PC8803SC02/PC8803SC04),具有精确的电流感测,设计用于在宽输入电压范围内工作 从4.5V到40V。该设备具有45V负载转储电源输入…

微信小程序触屏事件_上划下划事件

一、微信小程序触屏事件 bindtouchstart:手指触摸动作开始 bindtouchmove:手指触摸后移动 bindend:手指触摸动作结束 属性类型说明touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组 Touch 对象 属性类型说明identi…

pgvector docker部署测试

docker pull pgvector/pgvector:pg16 运行 docker run --name pgvector --restartalways -e POSTGRES_USERpgvector -e POSTGRES_PASSWORDpgvector -v /srv/tlw/pgvectordata:/var/lib/postgresql/data -p 54333:5432 -d pgvector/pgvector:pg16 CREATE EXTENSION vector; --…

总结:大模型技术栈---算法与原理

原文地址:大模型技术栈-算法与原理 1. tokenizer方法 word-level char-level subword-level BPE WordPiece UniLM SentencePiece ByteBPE2. position encoding 绝对位置编码 ROPE AliBi 相对位置编码 Transformer-XL T5/TUPE DeBERTa3. 注意力机制 Mamba,H3,Hyena…

【Redis】Redis持久化模式RDB

目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用,他肯定有数据需要持久化,这里我们就来聊聊两种持久化机制。这两种机制,其实是 快照 与 日志 的形式。快照:就是当前数据的备份,我可以拷贝到磁…

C语言指针的初步认识--学习笔记(3)

1. 字符指针变量 在C语言中,字符串通常被视为字符数组,但它们可以有不同的表示方式。字符指针变量存储的是字符串的地址。这意味着,当你有一个字符串时,你可以通过改变字符指针的值来改变这个字符串,因为你实际上改变的…

保修期内经营者收取维修费用应遵循正当程序原则

↑↑↑“上海高院”头条号为您讲述精彩的法律科普内容 上海市第一中级人民法院在履行司法审判职能的同时,始终高度重视高质量案件工作,总结司法审判经验,努力提高司法审判质量。 在2020年全国法院系统优秀案例分析评选活动中,上海…

合并有序链反转链表(递归版)

每日一题系列(day 19) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50…

基于RFID技术+WMS仓储管理应用设计

一、项目背景 1.1 背景 仓储管理是企业对仓库及其内部物资进行计划、组织、控制和协调的管理过程。它在整个物流和经济活动中扮演着重要的角色,连接着生产者和消费者。 不同规模和产品种类的企业有不同的仓储管理流程和需求,但核心部分都包括仓库作业…

设计模式:策略模式 ⑥

一、策略模式思想 简介 策略模式(Strategy Pattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。…

msvcp120.dll丢失的解决方法,教你快速解决msvcp120.dll问题

msvcp120.dll是一个在Windows操作系统中至关重要的系统文件,它属于Microsoft Visual C Redistributable Package的一部分。这个动态链接库文件(DLL)包含了运行某些应用程序所必需的C运行时库函数。当某个程序在运行过程中需要调用这些预先编译…

关于制作一个Python小游戏(三)

目录 前言: 在前面我们已经了解过了关于制作pygame的使用和在里面游戏中的简单操作的内容了,今天我们主要讲的就是关于敌机的出现和如何去操控游戏中英雄飞机和敌机的出现 1.敌机的设计: 1.1敌机出场的实现: 1.1.1游戏启动后,每个一秒钟出现一架敌方飞机 1.1.2每架敌机向屏…

九章云极DataCanvas公司出席WBBA 2024宽带发展大会

2024年2月27日,由全球云网宽带产业协会(World Broadband Association, WBBA)主办的全球宽带产业盛会——宽带发展大会(Broadband Development Congress, BDC),与全球云网宽带产业合作伙伴相约巴塞罗那。九章…

【爬虫】单首音乐的爬取(附源码)

以某狗音乐为例 import requests import re import time import hashlibdef GetResponse(url):# 模拟浏览器headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0}# 发送请求…

Milvus 向量数据库实践 - 1

假定你已经安装了docker、docker-compose 环境 参考的文档如下: Milvus技术探究 - 知乎 MilvusClient() - Pymilvus v2.3.x for Milvus 一文带你入门向量数据库milvus 一、在docker上安装单机模式milvus数据库 1、 进入milvus官网: Install Milvus Stand…

LeetCode:1976. 到达目的地的方案数(spfa + 记忆化 Java)

目录 1976. 到达目的地的方案数 原题链接 题目描述: 实现代码与解析: spfa 记忆化 原理思路: 1976. 到达目的地的方案数 原题链接 1976. 到达目的地的方案数 题目描述: 你在一个城市里,城市由 n 个路口组成&a…

html 文字滚动

<marquee> 标签 创建文字滚动的标签 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>wzgd</title></head><body><marquee direction"left" height"30" width"600&q…