Java面向对象的知识(二)
抽象类
抽象就是从多个事物中将共性的,本质的内容抽取出来。例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
抽象类的特点:
a.抽象类和抽象方法必须用abstract关键字来修饰。
b.抽象方法只有方法声明,没有方法体,定义在抽象类中。
c.抽象类不可以被实例化,也就是不可以用new创建对象。但可以按照多态的使用方式使用。
d.抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。也就是说一个类继承抽象类的时候,要么本身是一个抽象类;要么实现抽象类中的所有抽象方法。
成员特点:
a:成员变量可以是变量,也可以是常量。
b: 有构造方法
c:成员方法可以是抽象,也可以非抽象。
抽象类的优点:
A:抽象类中的非抽象方法提高了代码的复用性。
B:抽象类中的抽象方法强制要求子类必须重写某些方法。
格式:修饰符 abstract 返回值类型 函数名(参数列表) ;
应注意的问题:
A:抽象类不能实例化,构造方法有什么用呢?
用于子类访问父类数据的初始化。
B:如果一个类中没有抽象方法,而类却被定义为了抽象类,请问为什么?
不让创建对象。
C:关键字abstract不能和哪些关键字共存?
private: 冲突
final: 冲突
static: 无意义
接口
格式: interface接口名 { }
如果一个抽象类中的所有成员方法都是抽象的,java就提高了一种更抽象的表达方式——接口。接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
接口的特点:
A:接口用interface定义。类实现接口用implements关键字。
B:一个类要实现接口, 要么本身是抽象类;要么实现接口中的所有抽象方法。
C:接口不能实例化。可以按照多态的使用方式使用。
D:接口中的成员修饰符是固定的。
• 成员常量:publicstatic final
• 成员函数:publicabstract
• 接口中的成员都是public修饰的。
接口的另一些特性:
• 接口是对外暴露的规则。
• 接口是程序的功能扩展。
• 接口的出现降低耦合性。
• 接口可以用来多实现。
• 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
• 接口与接口之间可以有继承关系
接口与抽象类的区别
共性:都是不断抽取出来的抽象的概念。
区别:
A、抽象类体现继承关系,一个类只能单继承。接口体现实现关系,一个类可以多实现
B、抽象类是继承,是 "is a "关系。接口是实现,是 "like a"关系
C、抽象类中可以定义非抽象方法,供子类直接使用。接口的方法都是抽象,接口中的成员都有固定修饰符
D、成员区别
抽象类:
a:成员变量可以是变量,也可以是常量。
b: 有构造方法
c:成员方法可以是抽象,也可以非抽象。
接口:
a:成员变量只能是常量。默认修饰符:public static final
b:成员方法只能是抽象方法。默认修饰符:public abstract
对象的多态性
在程序中体现为父类或者接口的引用指向或者接收自己的子类对象。
主要分为两种:
(1) 向上转型:子类对象——> 父类对象
(2) 向下转型:父类对象——> 子类对象
向上转型格式:父类 父类对象 = 子类实例;
向下转型格式:子类 子类对象 = (子类)父类实例;
class A{ //定义类Apublic void fun1(){ //定义fun1()方法 System.out.println("A ——> fun1()");}public void fun2(){ //定义fun2()方法this.fun1();}
}
class B extends A{ //子类B继承父类Apublic void fun1(){ //覆写父类的fun1()方法System.out.println("B ——> fun1()");}public void fun3(){ //定义子类自己的方法fun3()System.out.println("B ——> fun3()");}
}
class Demo{
public static void main (String [] args){B b = new B(); //定义子类实例化对象A a = b; //发生了向上转型的关系,子类 ——>父类a.fun1(); //此方法被子类覆写过,结果为:B ——> fun1()}
}
/*以上程序是一个对象向上转型的关系,从程序结果看,如果对象发生了向上转型关系后,所调用的方法一定是被子类覆写过的方法。此时要注意,对象a是无法调用B类中的fun3()方法的,因为此方法只在子类中定义,而没有在父类中定义。如果要调用子类自己定义的方法,则必须使用子类实例,所以此时可以将对象向下转型。A a = new B();B b = (B)a;b.fun1();b.fun2();b.fun3();注意:在进行对象向下转型前,必须首先发生对象向上转型,否则将出现对象转换异常:java.lang.ClassCastException*/
多态的特点:
成员函数:
a.编译时:要查看引用变量所属的类中是否有所调用的成员。
b.在运行时:要查看对象所属的类中是否有所调用的成员。
成员变量:
只看引用变量所属的类。
优点:多态的存在提高了程序的扩展性和后期可维护性
内部类
将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
访问特点:
a.内部类可以直接访问外部类中的成员,包括私有成员。
b.而外部类要访问内部类中的成员必须要建立内部类的对象。
注意:
a.内部类定义在成员位置上被称为成员内部类。可以被private static成员修饰符修饰。被static修饰的内部类只能访问外部类中的静态成员。
b.内部类定义在局部位置上称为局部内部类。也可以直接访问外部类中的成员。同时可以访问所在局部中的局部变量,但必须是被final修饰的。
匿名内部类
是内部类的简化写法。
前提:内部类可以继承或实现一个外部类或者接口。
格式为:
new 外部类名或者接口名() {覆盖类或者接口中的代码,(也可以自定义内容。)}
简单理解:就是建立一个带内容的外部类或者接口的子类匿名对象。通常在使用方法是接口类型参数,且该接口中的方法不超过三个时,可以将匿名内部类作为参数传递,增强阅读性。
包(package)
写在程序文件的第一行,给类提供多层命名空间,并对类文件进行分类管理。包也是一种封装形式。
注意:类名的全称的是 包名.类名
包之间的访问
被访问的包中的类权限必须是public的。类中的成员权限:public或者protected。protected是为其他包中的子类提供的一种权限
四种权限如下图:
import关键字
一个程序文件中只有一个package,可以有多个import。用来导包中的类,不导入包中的包。
Jar包
Java的压缩包。方便项目的携带,方便于使用,只要在classpath设置jar路径即可。数据库驱动,SSH框架等都是以jar包体现的。
可以通过jar.exe工具对jar的操作。
创建jar包:jar -cvf mypack.jar packa
查看jar包:jar -tvf mypack.jar [>定向文件]
解压缩:jar -xvf mypack.jar
自定义jar包的清单文件:jar –cvfm mypack.jar mf.txt packa
Java面向对象的知识(二)相关推荐
- Java 游戏开发:关于Java面向对象的知识(一)
Java 游戏开发:关于Java面向对象的知识(一) 软件的生命周期(了解即可) 由于我们是大专生 这里的生命周期是之前软件工程的笔记,你们了解就可以了 什么是软件的生命周期 一个软件从被开发到被正式 ...
- Java 游戏开发:关于Java面向对象的知识( 四)
这是上期教程:Go To It! 新年过去了,鸽了几天的教程,今天我们开始继续学习(新年快乐~) 游戏人物类的实现 对于一个游戏人物而言,我们可以想到以下的字段: 最大血量 当前血量 名称 装备数组( ...
- Java SE基础知识(二)--整数的运算符
Java SE 是什么,包括哪些内容(二)? 本文内容参考自Java8标准 一.代码运行机制相关的内容: 1.Java中的类型分类("你编程时能使用的类型全部在这里了"): ⑴.J ...
- 4.Java面向对象相关知识总结
一.static关键字 1. static修饰的特点 1.1 被类的所有对象共享,是我们判断是否使用静态关键字的条件. 1.2 随着类的加载而加载,优先于对象存在(即使没有创建对象,也可以通过类名来使 ...
- 7. Java面向对象编程(二)
文章目录 1. idea使用 1.1 idea常用快捷键(自己配置过) 1.2 idea模板 / 自定义模板 1.3 idea 查看类的所有属性.方法 2. 包 2.1 包的作用 2.2 包的基本语法 ...
- java面向对象的特征二:继承性 —(14)
1.为什么要有类的继承性?(继承性的好处) ① 减少了代码的冗余,提高了代码的复用性 ② 便于功能的扩展 ③ 为之后多态性的使用,提供了前提 图示: 2.继承性的格式: class A extends ...
- JAVA面向对象初步知识总结:封装、继承、多态
1.封装 把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是是封装.其结果是一个同时带有特征和行为的数据类型. 所谓具体实现的隐藏是通过访问权限控制实现的. JAVA 子类重写继承的方法时,不 ...
- java面向对象小知识
(一).面向对象的由来: 1.60年中期软件危机(software crisis)--落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现的一系列严重问题的现象. 软禁 ...
- Java面向对象的知识(一)
这里通过一则历史小故事来解释什么是面向对象的思想. 帝置酒雒阳南宫.上曰:"列侯.诸将毋敢隐朕,皆言其情.我所以有天下者何?项氏之所以失天下者何?"高起.王陵对曰:"陛下 ...
- 上机实验3-2 Java面向对象编程(二)
实验1 家中的电视 一.实验目的 成员变量也可能是引用类型,通过实验让学生掌握对象的组合以及参数传递 二.实验内容 编写一个Java应用程序,模拟家中买了一台电视机,家庭将电视机作为自己的一个成员.具 ...
最新文章
- 离线安装Visual Studio Code插件
- AI工程师成长记 - 工作方法!
- p沟道mos管导通条件_10天电子入门-MOS管
- 线上办公室 x 音视频会议最佳实践
- 前端路由(一) 路由,hash,history
- for循坏的穷举与迭代,while、do while循环
- 适合NetScaler AG部署的 WI 定制站点开发
- php中文网地址多少,计算机网络中有几种地址格式
- 大数相乘(大数阶乘模板)
- nssl1467-U【差分】
- 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin
- matlab 频率分布直方图_小猿圈Python开发之绘制频率分布直方图示例
- python自动回复_Python—itchat实现微信自动回复
- zblog模板php免费三栏,天兴工作室三栏布局zblog模板
- 人民币对美元汇率中间价报6.7969元 下调115个基点
- 袁春风老师:计算机系统基础(一) 第一章
- Android4.1.0实战教程---自动阅读小说
- GNN金融应用之Classifying and Understanding Financial Data Using Graph Neural Network学习笔记
- 【USACO Open11】forgot
- “第二盖茨”——马克·扎克伯格