java学习日记-进阶三
回顾:
面向对象的特点:
抽象,封装,继承,多态
抽象:抽取一个事物主要的特性
封装:属性私有,使用private修饰属性
继承 : 提取公共的属性,定义成父类,其他类继承此类
- 继承的类叫做子类,被继承的类叫做父类
- 子类继承了父类所有的属性和方法
- 非私有的属性和方法
super : 指向该对象的父类对象
- super.属性名 操作属性值 属性要是非私有
- super.方法名(参数值) 调用父类方法
- super(); super(参数值); 调用父类的构造方法
class Dog { String type;String color;String character;
}
class Cat {String type;String color;String speed;
}Dog dog = new Dog();
dog.type = "泰迪";
dog.color = "黑色";
dog.character = "温顺";Cat cat = new Cat();
cat.type = "泰迪";
cat.color = "黑色";
cat.speed = "200";
1. 多态
在子类重写父类方法的前提下,父类的引用指向子类的对象,调用重写后的方法,会产生不同的结果,这种情况就叫做多态。
package com.qf;public class Demo01 {public static void main(String[] args) {/** 重写*/Dog dog = new Dog();dog.call();Cat cat = new Cat();cat.call();System.out.println("_______________________________________");/** 多态:* 父类的引用(变量)可以指向子类的对象* 子类重写父类的方法*///有一个宠物(变量名叫p1) 它是一条狗Pet p1 = new Dog();//有一个宠物(变量名叫p1) 它是一只猫Pet p2 = new Cat();//数据类型一致,调用方法一样,结果却不一样 这种情况就是多态p1.call();p2.call();//添加宠物子类 兔子类 重写 叫方法 使用父类的引用指向兔子的对象,,执行叫方法System.out.println("+++++++++++++++++++++++++++++++++++");/** 执行petCall* dogCall(dog);* catCall(cat);* ...*/petCall(dog);petCall(cat);}//编写方法public static void dogCall(Dog dog) {dog.call();}public static void catCall(Cat cat) {cat.call();}//......public static void petCall(Pet pet) {pet.call();}}class Pet {//宠物叫的方法public void call() {System.out.println("宠物叫");}
}class Dog extends Pet {public void call() {System.out.println("狗叫--汪汪汪");}public void gatekeeper() {System.out.println("看门--");}}class Cat extends Pet {public void call() {System.out.println("猫叫--喵喵喵");}public void catchMice() {System.out.println("逮老鼠--------");}}
2.数据类型转化
数据类型往上转(装箱)
- 自动转化
- 就是父类的引用指向子类的对象
数据类型往下转(拆箱)
强制转化
把父类的引用指向的对象赋值给子类的变量
为了防止报错,可以使用instanceof判断父类引用指向的对象的数据类型
//instanceof 使用语法 变量名 instanceof 类名; // 返回一个boolean类型数据
package com.qf;public class Demo01 {public static void main(String[] args) {//d2的数据类型DogDog d2 = new Dog();/** d2赋值给p3* * 数据类型发生了变化 * 把子类的对象赋值给父类的引用,这种转化,我们就叫做数据类型往上转化 (装箱)* - 自动转化*/Pet p3 = d2;/** 这种把一个宠物变量指向的对象,转化为狗的对象* * 把父类指向的对象,赋值给子类的引用(变量),我们就做数据类型往下转化 (拆箱)* - 需要强制类型转化,需要开发者自行确认,并自负后果*/Dog d3 = (Dog) p3;/** 我们在进行拆箱时,可以使用 instanceof 来判断变量指向的数据类型,来防止数据类型转化错误*/p3 = new Dog();if(p3 instanceof Cat) {Cat c3 = (Cat) p3;c3.catchMice();}if (p3 instanceof Dog) {Dog d4 = (Dog) p3;d4.gatekeeper();}//在兔子类添加吃窝边草方法, 对宠物类型进行判断,如果是兔子,就进行转化类型转化,执行吃窝边草方法}}class Pet {//宠物叫的方法public void call() {System.out.println("宠物叫");}
}class Dog extends Pet {public void call() {System.out.println("狗叫--汪汪汪");}public void gatekeeper() {System.out.println("看门--");}}class Cat extends Pet {public void call() {System.out.println("猫叫--喵喵喵");}public void catchMice() {System.out.println("逮老鼠--------");}}
3. abstract修饰符
- Animal类中call方法一定会被子类重写
- call方法没有执行的机会
- call方法的方法体就没存在意义
- 我们就可以把方法体删了,删过会报错
- 因为一个正常的实例方法,应该要有方法体
- java就新增加一个规定,由abstract修饰的方法,可以没有方法体,叫做抽象方法
- 当我们把一个定义抽象方法时,发现类报错了
- 因为java也规定了,抽象方法必须放在抽象类中,也就是有abstarct修饰的类(抽象类)
- 为类添加abatract修饰符
通过上述操作,我们就做了一件事,把父类中,一定会被重写,且不会被执行方法的方法体删除了。
abstract修饰的类就做抽象类
abstarct修饰的方法,叫做抽象方法
java学习日记-进阶三相关推荐
- 尚学堂Java学习日记Day3
尚学堂Java学习日记Day3 第三天老师先回顾了昨天的内容我从回顾中掌握了新的知识 如下图所示 int与double计算,输出类型为double的不同结果 会把int转成double类型的,这是隐式 ...
- Java学习日记1——基础认知
Java学习日记1--基础认知 学习Java阶段,如果发现不正确的描述,还请指正! 首先附上Java相关下载链接和配置教程链接 Java相关软件工具下载地址:官方下载 Java环境配置(win10配置 ...
- Java学习日记-Day01
Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...
- 安卓开发学习日记第三天_新手怪button_莫韵乐的欢乐笔记
安卓开发学习日记第三天--新手怪button (不是buttercup,虽然里面好像也有button,心中已经响起那段音乐了) 前情提要: 第一天学习日记之安装Android Studio3.6 第二 ...
- Java学习日记:UI篇(6)--谢尔宾斯基地毯图
Java学习日记:UI篇(6)–谢尔宾斯基地毯图 引言:谢尔宾斯基地毯是数学家谢尔宾斯基提出的一个分形图形,谢尔宾斯基地毯和谢尔宾斯基三角形基本类似,不同之处在于谢尔宾斯基地毯采用的是正方形进行分形构 ...
- Java学习日记8:文件上传工具类的实现和服务器给客户端发送图片
文件上传的工具类: 每次文件上传要写很多东西,把这些封装成一个工具类,以后用起来就会方便很多. 先创建一个类存储上传文件的信息: package com.upload; /*** 每上传成功一个文件的 ...
- Java学习路线·进阶
Java学习路线是CSDN面向开发者提供系统化「学+练」产品,帮助每一位学习者成为一名优秀的Java工程师. 学习路线系统的涵盖了Java领域内容从初级到进阶所需要学习的一系列「知识点」,内容覆盖Ja ...
- Java学习笔记(三十五)
在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...
- 尚学堂Java学习日记Day1
尚学堂学习日记Day1 #今天开始写学习博客记录自己学习java的点滴成长历程,希望能成为学弟学妹们的前车之鉴. 先大概的自我介绍下,我原本从事的是网络工程师,学习的是Cisco(思科)并拥有CCNP ...
最新文章
- 六一:如何在Datawhale开源学习小程序中管
- SAP RETAIL 分配表功能的使用
- Spring----Spring Boot Rest的使用方法
- java mission 篡改后 网速很慢_关于直连网线速度正常,插上路由器后速度变慢的解决方法{不全面}...
- 修改用户名_新华美育查找用户名及修改密码的方法分享
- unity json mysql_unity——json总结
- mysql的表创建_MYSQL表创建
- PHP通过PDO连接Microsoft Access数据库
- 扩展JavaScript原生方法
- java遍历d盘所有文件夹_java遍历指定盘符的所有文件和文件夹
- 计算机关闭445端口,如何关闭445端口 win7/win10关闭445端口的方法图解
- 手机刷入面具_【手机改造计划】搞机助手 - 小白刷机必备工具,搞机一条龙:解锁、root、刷面具、刷xposed框架、模块下载安装、自动救砖...
- vue-echarts教程
- 区块链开发完整指南。如何开发一款区块链项目?
- html图片橡皮擦特效,原生制作的js涂鸦画板特效 可调画笔颜色|粗细|橡皮檫功
- 连续9年惠及10万贫困家庭 金科“情暖万家”春节送温暖再出发
- 昔日的手游大作,《无尽之剑》系列如今为何走向英雄末路?
- 体育技术机器学习金钱和灵感的圣杯
- Base64方式上传文件
- Platinum Maestro运动控制器 ——速度位置等数据的获取
热门文章
- win7 wlan 服务器无响应,Win7启用WLAN AutoConfig服务错误1068的解决措施
- 啊哈C——学习2.6一起来找茬
- 富力等待黎明:李思廉走在还债的漫漫长路
- 建立student类,在此类中所有数据定义为私有数据变量。并建立一个student对象数组,用附件中的数据进行初始化。计算每个学生三门课程的总分和平均成绩(C++实验)
- Flutter 从 TextField 安全泄漏问题深入探索文本输入流程
- 小冰创作诗歌机制详解
- 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(网络与信息安全)
- 潘多拉固件设置ipv6_玩转PLEX 篇四:家用宽带连接IPV6的方法
- def python_multi(n)_Python:MultiPing.py
- iOS中 百度地图详解 韩俊强的博文