java从入门到入土图_Java从入门到入土day08
好家伙,这个作者竟然妄图一天就把面向对象的两个特征说了。他可真是自不量力啊,作者心中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相关推荐
- java写方法用来调用_Java从入门到入土(79)lambda表达式和方法引用
lambda表达式是Java8引入的新功能.lambda表达式以字面量的形式把少量代码直接写在程序中,从而让 Java 编程更符合函数式风格(Java 实质上是面向对象语言.不过,引入lambda 表 ...
- java从入门到精通教程_Java从入门到精通全套教程
Java从入门到精通全套教程视频简介: 随着电脑网络的飞速发展,对现代计算机软件人才的要求越来越高.既要求他们横向掌握多门主流的编程语言,又需要同时至少对1-2门编程技术有深刻的认知.特此,星火视频为 ...
- java从入门到精通教程_Java从入门到精通小白教程
Java从入门到精通小白教程,是小编为大家找到的一套非常不错的java编程学习实战资料,是专业版的学习工具书,它的主要作用是帮助用户进行全面基础学习和进阶准备,是十分靠谱的教程!希望大家好好学习,一起 ...
- java二维数组添加数据_Java小白入门必懂知识点
1.Java语言的特点 (1)Java语言是一种面向对象的编程语言 (2)简单.高效.稳定.安全性高 (3)Java语言是一种与平台无关的编程语言,因为其自身提供程序运行的解 释环境 (4)支持多线程 ...
- java基础入门txt下载地址_java基础入门-ZipOutputStream打包下载
今天跟大家聊聊使用ZipOutputStream打包下载,我下面是使用ant的jar打包的,因为他对应中文的支持比较好 大家也可以使用java.util.zip包里面的工具类打包,但是他对于中文不友好 ...
- java银行转账会出现的问题_java基础入门-多线程同步浅析-以银行转账为例子
在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次运行活动,一个进程有一个或者多个线程 线程与进程的本质区别就是有么有数据共享空间,线程 ...
- 《java从入门到放弃》_JAVA从入门到放弃(四)
专栏更新到三月六号,发现实在没动力干下去了,不是没人关注.没人看到不要紧,反正我这人低调,再者我写这些东西的目的就是记录吧,方便以后自己看. 关键是这样做真的好累,每天都有很多课程去学习,虽然说大学相 ...
- java怎么输出a的值_Java输入输出入门 A+B
描述 求两个整数之和. 输入 输入数据只包括两个整数A和B. 输出 两个整数的和. 样例输入 1 2 样例输出 3 importjava.util.Scanner;public classMain { ...
- python从入门到精通清华_java从入门到精通(第5版)+python从入门到精通+c语言从入门到精通 全3册 清华大学出版社...
<JAVA从入门到精通(第5版)> <Java从入门到精通(第5版)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识 ...
最新文章
- 网页转变成app,隐藏浏览器地址栏
- ASP.NET MVC 的 WebGrid 的 6 个重要技巧 【已翻译100%】
- WinDbg学习笔记(一)--认识WinDbg
- 深拷贝、浅拷贝以及引用传递和按值传递的区别与联系
- C#(.Net)中调用Sql sever汉字字符串显示为?问号
- vscode设置中文,设置中文不成功问题
- Shell命令行操作
- office2010使用mathtype时,出现未找到MathPage.WLL解决方案--亲测有用
- HTML button标签
- C#代码实现矢量画图
- 开源之旅——应用服务器篇
- 二维码生成易语言代码
- 设计模式 - 模板方法设计模式
- PDF编辑方法,如何裁剪PDF中的一页
- 数组取第一个元素和最后一个元素
- 用计算机刻录光盘,图文详解怎么用电脑刻录光盘
- c语言检测网络连接,C++ 网络连通性检测的实现方法
- C语言中free函数如何确定释放的空间大小
- filter- 配置多过滤url
- 如何在PPT中插入校徽等Logo并修改颜色(无需下载任何软件)
热门文章
- C#使用GDI+绘制高质量图和字体
- Go 简介、应用场景
- 毕业设计开题报告任务书参考文献格式和数量要求
- linux下开机自动打开某网址
- Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user “XXX“
- CString 判断存在中文,大小写字母及标点
- 计算机键盘如何打字课件,键盘和打字指法ppt课件
- sdcms php源码,Sdcms - 源码下载|Windows编程|其他小程序|源代码 - 源码中国
- deeplearning.ai 改善深度神经网络(正则化、优化、mini-batch等)附代码作业答案
- 一键配网、联网点阵时钟、继电器的基本应用 | Mixly纯干货课程