好家伙,这个作者竟然妄图一天就把面向对象的两个特征说了。他可真是自不量力啊,作者心中OS:学习真累,赶快写完去打游戏真香。

正文分割线

一、抽象

1、抽象的定义:抽象,字面意思。很抽象,很多人都不懂的东西就叫抽象。那么放在Java中是什么样的体现呢?百度百科的答案是:抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。

2、Java中抽象的体现:

抽象类:抽象方法必须写在抽象类中,抽象类中可以有除了抽象方法以外的方法。抽象方法意味着在本类中我自己这个类不实现这个方法,这个方法需要通过子类帮我实现。就像你的老板,他只是给你提供了一个解决问题的思路,但是具体流程怎么落地,还是得看你自己怎么做。

接口:接口的话后面会说,现在说了就不能多水一个文章了。

3、抽象类的关键字:

abstract:抽象类定义时,abstract写在class前面。抽象方法定义时,abstract写在返回值定义之前。一个方法定义为抽象类之后,他就可以不用写{},而是应该直接分号结尾来结束这个语句。

二、多态

1、多态的定义:同样的方法,不同的实现就是Java中的多态。

2、静态多态

重载:相同的类中,允许写多个方法名一样的方法。

3、动态多态

重写:子类重新实现父类的方法,前提是要和父类中的方法一样。重写父类的方法时,不能比父类的方法范围大,假如父类使用protect修饰,那么子类不能用public。而且返回值也得一样。前两个点的原理是子类不能比父类抛出更多的异常,而修改这些东西有可能会造成比父类造成更多的异常。

动态绑定:根据传入方法的对象不同,来执行不同的方法。在说具体一点:当子类重写父类的方法时,这时候就存在了两个相同名字,相同类型的方法。那么在程序加载中的时候,程序应该调用哪个呢?这个时候就会根据你传入的对象是子类还是父类进行选择。假如传入是子类就会执行子类的方法。

类型转换:符合继承关系的两个类,支持子类自动向上转型为父类,但是父类向下转型的话还是要强制转换,使用()。

代码举例

package UnAble;

/*** 用于演示抽象和多态的类* @author 84980**/

public class Test {

public static void main(String[] args) {

//通过实现类的实例化来赋值给抽象类,因为抽象类是不能实例化的fatherAb fab=new child();

//调用抽象类自身实现的方法fab.ill();

//调用抽象子类的实现方法fab.hello();

//实例化父类Father f=new Father();

//调用父类中的方法human(f);

//实例化子类ChildBen c=new ChildBen();

//正常调用子类中的方法human(c);

//创建一个父类的对象,但是把子类赋值给它,子类会自动转换为父类Father cff=new ChildBen();

//虽然cff定义是父类对象,但实际上他是由子类传入,所以调用下面的测试方法还是会输出子类的方法,这就是动态绑定human(cff);

//父类对象强制转换为子类对象,为了避免强制转型带来的风险,我们需要使用instanceof来判断这个对象是否是子类if (cff instanceof ChildBen) {

ChildBen cf = (ChildBen) cff;

human(cf);

}

}

/*** 测试动态多态的方法*/

public static void human(Father f) {

f.walk();

}

}

//因为定义了抽象方法,所以该类就必须设置为抽象类abstract class fatherAb{

//定义一个抽象方法public abstract void hello();

//抽象类中的非抽象方法public void ill() {

System.out.println("我是抽象类中的非抽象方法");

}

}

class child extends fatherAb{

@Override

public void hello() {

// TODO 自动生成的方法存根System.out.println("我是实现父类抽象方法的子类");

}

}

class Father{

public void walk() {

System.out.println("我是爸爸,我会走路");

}

}

class ChildBen extends Father{

public void walk() {

System.out.println("我是儿子,我也会走路");

}

}

java从入门到入土图_Java从入门到入土day08相关推荐

  1. java写方法用来调用_Java从入门到入土(79)lambda表达式和方法引用

    lambda表达式是Java8引入的新功能.lambda表达式以字面量的形式把少量代码直接写在程序中,从而让 Java 编程更符合函数式风格(Java 实质上是面向对象语言.不过,引入lambda 表 ...

  2. java从入门到精通教程_Java从入门到精通全套教程

    Java从入门到精通全套教程视频简介: 随着电脑网络的飞速发展,对现代计算机软件人才的要求越来越高.既要求他们横向掌握多门主流的编程语言,又需要同时至少对1-2门编程技术有深刻的认知.特此,星火视频为 ...

  3. java从入门到精通教程_Java从入门到精通小白教程

    Java从入门到精通小白教程,是小编为大家找到的一套非常不错的java编程学习实战资料,是专业版的学习工具书,它的主要作用是帮助用户进行全面基础学习和进阶准备,是十分靠谱的教程!希望大家好好学习,一起 ...

  4. java二维数组添加数据_Java小白入门必懂知识点

    1.Java语言的特点 (1)Java语言是一种面向对象的编程语言 (2)简单.高效.稳定.安全性高 (3)Java语言是一种与平台无关的编程语言,因为其自身提供程序运行的解 释环境 (4)支持多线程 ...

  5. java基础入门txt下载地址_java基础入门-ZipOutputStream打包下载

    今天跟大家聊聊使用ZipOutputStream打包下载,我下面是使用ant的jar打包的,因为他对应中文的支持比较好 大家也可以使用java.util.zip包里面的工具类打包,但是他对于中文不友好 ...

  6. java银行转账会出现的问题_java基础入门-多线程同步浅析-以银行转账为例子

    在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次运行活动,一个进程有一个或者多个线程 线程与进程的本质区别就是有么有数据共享空间,线程 ...

  7. 《java从入门到放弃》_JAVA从入门到放弃(四)

    专栏更新到三月六号,发现实在没动力干下去了,不是没人关注.没人看到不要紧,反正我这人低调,再者我写这些东西的目的就是记录吧,方便以后自己看. 关键是这样做真的好累,每天都有很多课程去学习,虽然说大学相 ...

  8. java怎么输出a的值_Java输入输出入门 A+B

    描述 求两个整数之和. 输入 输入数据只包括两个整数A和B. 输出 两个整数的和. 样例输入 1 2 样例输出 3 importjava.util.Scanner;public classMain { ...

  9. python从入门到精通清华_java从入门到精通(第5版)+python从入门到精通+c语言从入门到精通 全3册 清华大学出版社...

    <JAVA从入门到精通(第5版)> <Java从入门到精通(第5版)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识 ...

最新文章

  1. 网页转变成app,隐藏浏览器地址栏
  2. ASP.NET MVC 的 WebGrid 的 6 个重要技巧 【已翻译100%】
  3. WinDbg学习笔记(一)--认识WinDbg
  4. 深拷贝、浅拷贝以及引用传递和按值传递的区别与联系
  5. C#(.Net)中调用Sql sever汉字字符串显示为?问号
  6. vscode设置中文,设置中文不成功问题
  7. Shell命令行操作
  8. office2010使用mathtype时,出现未找到MathPage.WLL解决方案--亲测有用
  9. HTML button标签
  10. C#代码实现矢量画图
  11. 开源之旅——应用服务器篇
  12. 二维码生成易语言代码
  13. 设计模式 - 模板方法设计模式
  14. PDF编辑方法,如何裁剪PDF中的一页
  15. 数组取第一个元素和最后一个元素
  16. 用计算机刻录光盘,图文详解怎么用电脑刻录光盘
  17. c语言检测网络连接,C++ 网络连通性检测的实现方法
  18. C语言中free函数如何确定释放的空间大小
  19. filter- 配置多过滤url
  20. 如何在PPT中插入校徽等Logo并修改颜色(无需下载任何软件)

热门文章

  1. C#使用GDI+绘制高质量图和字体
  2. Go 简介、应用场景
  3. 毕业设计开题报告任务书参考文献格式和数量要求
  4. linux下开机自动打开某网址
  5. Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user “XXX“
  6. CString 判断存在中文,大小写字母及标点
  7. 计算机键盘如何打字课件,键盘和打字指法ppt课件
  8. sdcms php源码,Sdcms - 源码下载|Windows编程|其他小程序|源代码 - 源码中国
  9. deeplearning.ai 改善深度神经网络(正则化、优化、mini-batch等)附代码作业答案
  10. 一键配网、联网点阵时钟、继电器的基本应用 | Mixly纯干货课程