回顾:

面向对象的特点:

​ 抽象,封装,继承,多态

抽象:抽取一个事物主要的特性

封装:属性私有,使用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学习日记-进阶三相关推荐

  1. 尚学堂Java学习日记Day3

    尚学堂Java学习日记Day3 第三天老师先回顾了昨天的内容我从回顾中掌握了新的知识 如下图所示 int与double计算,输出类型为double的不同结果 会把int转成double类型的,这是隐式 ...

  2. Java学习日记1——基础认知

    Java学习日记1--基础认知 学习Java阶段,如果发现不正确的描述,还请指正! 首先附上Java相关下载链接和配置教程链接 Java相关软件工具下载地址:官方下载 Java环境配置(win10配置 ...

  3. Java学习日记-Day01

    Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...

  4. 安卓开发学习日记第三天_新手怪button_莫韵乐的欢乐笔记

    安卓开发学习日记第三天--新手怪button (不是buttercup,虽然里面好像也有button,心中已经响起那段音乐了) 前情提要: 第一天学习日记之安装Android Studio3.6 第二 ...

  5. Java学习日记:UI篇(6)--谢尔宾斯基地毯图

    Java学习日记:UI篇(6)–谢尔宾斯基地毯图 引言:谢尔宾斯基地毯是数学家谢尔宾斯基提出的一个分形图形,谢尔宾斯基地毯和谢尔宾斯基三角形基本类似,不同之处在于谢尔宾斯基地毯采用的是正方形进行分形构 ...

  6. Java学习日记8:文件上传工具类的实现和服务器给客户端发送图片

    文件上传的工具类: 每次文件上传要写很多东西,把这些封装成一个工具类,以后用起来就会方便很多. 先创建一个类存储上传文件的信息: package com.upload; /*** 每上传成功一个文件的 ...

  7. Java学习路线·进阶

    Java学习路线是CSDN面向开发者提供系统化「学+练」产品,帮助每一位学习者成为一名优秀的Java工程师. 学习路线系统的涵盖了Java领域内容从初级到进阶所需要学习的一系列「知识点」,内容覆盖Ja ...

  8. Java学习笔记(三十五)

    在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...

  9. 尚学堂Java学习日记Day1

    尚学堂学习日记Day1 #今天开始写学习博客记录自己学习java的点滴成长历程,希望能成为学弟学妹们的前车之鉴. 先大概的自我介绍下,我原本从事的是网络工程师,学习的是Cisco(思科)并拥有CCNP ...

最新文章

  1. 六一:如何在Datawhale开源学习小程序中管
  2. SAP RETAIL 分配表功能的使用
  3. Spring----Spring Boot Rest的使用方法
  4. java mission 篡改后 网速很慢_关于直连网线速度正常,插上路由器后速度变慢的解决方法{不全面}...
  5. 修改用户名_新华美育查找用户名及修改密码的方法分享
  6. unity json mysql_unity——json总结
  7. mysql的表创建_MYSQL表创建
  8. PHP通过PDO连接Microsoft Access数据库
  9. 扩展JavaScript原生方法
  10. java遍历d盘所有文件夹_java遍历指定盘符的所有文件和文件夹
  11. 计算机关闭445端口,如何关闭445端口 win7/win10关闭445端口的方法图解
  12. 手机刷入面具_【手机改造计划】搞机助手 - 小白刷机必备工具,搞机一条龙:解锁、root、刷面具、刷xposed框架、模块下载安装、自动救砖...
  13. vue-echarts教程
  14. 区块链开发完整指南。如何开发一款区块链项目?
  15. html图片橡皮擦特效,原生制作的js涂鸦画板特效 可调画笔颜色|粗细|橡皮檫功
  16. 连续9年惠及10万贫困家庭 金科“情暖万家”春节送温暖再出发
  17. 昔日的手游大作,《无尽之剑》系列如今为何走向英雄末路?
  18. 体育技术机器学习金钱和灵感的圣杯
  19. Base64方式上传文件
  20. Platinum Maestro运动控制器 ——速度位置等数据的获取

热门文章

  1. win7 wlan 服务器无响应,Win7启用WLAN AutoConfig服务错误1068的解决措施
  2. 啊哈C——学习2.6一起来找茬
  3. 富力等待黎明:李思廉走在还债的漫漫长路
  4. 建立student类,在此类中所有数据定义为私有数据变量。并建立一个student对象数组,用附件中的数据进行初始化。计算每个学生三门课程的总分和平均成绩(C++实验)
  5. Flutter 从 TextField 安全泄漏问题深入探索文本输入流程
  6. 小冰创作诗歌机制详解
  7. 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(网络与信息安全)
  8. 潘多拉固件设置ipv6_玩转PLEX 篇四:家用宽带连接IPV6的方法
  9. def python_multi(n)_Python:MultiPing.py
  10. iOS中 百度地图详解 韩俊强的博文