抽象类

抽象就是从多个事物中将共性的,本质的内容抽取出来。例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。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面向对象的知识(二)相关推荐

  1. Java 游戏开发:关于Java面向对象的知识(一)

    Java 游戏开发:关于Java面向对象的知识(一) 软件的生命周期(了解即可) 由于我们是大专生 这里的生命周期是之前软件工程的笔记,你们了解就可以了 什么是软件的生命周期 一个软件从被开发到被正式 ...

  2. Java 游戏开发:关于Java面向对象的知识( 四)

    这是上期教程:Go To It! 新年过去了,鸽了几天的教程,今天我们开始继续学习(新年快乐~) 游戏人物类的实现 对于一个游戏人物而言,我们可以想到以下的字段: 最大血量 当前血量 名称 装备数组( ...

  3. Java SE基础知识(二)--整数的运算符

    Java SE 是什么,包括哪些内容(二)? 本文内容参考自Java8标准 一.代码运行机制相关的内容: 1.Java中的类型分类("你编程时能使用的类型全部在这里了"): ⑴.J ...

  4. 4.Java面向对象相关知识总结

    一.static关键字 1. static修饰的特点 1.1 被类的所有对象共享,是我们判断是否使用静态关键字的条件. 1.2 随着类的加载而加载,优先于对象存在(即使没有创建对象,也可以通过类名来使 ...

  5. 7. Java面向对象编程(二)

    文章目录 1. idea使用 1.1 idea常用快捷键(自己配置过) 1.2 idea模板 / 自定义模板 1.3 idea 查看类的所有属性.方法 2. 包 2.1 包的作用 2.2 包的基本语法 ...

  6. java面向对象的特征二:继承性 —(14)

    1.为什么要有类的继承性?(继承性的好处) ① 减少了代码的冗余,提高了代码的复用性 ② 便于功能的扩展 ③ 为之后多态性的使用,提供了前提 图示: 2.继承性的格式: class A extends ...

  7. JAVA面向对象初步知识总结:封装、继承、多态

    1.封装 把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是是封装.其结果是一个同时带有特征和行为的数据类型. 所谓具体实现的隐藏是通过访问权限控制实现的. JAVA 子类重写继承的方法时,不 ...

  8. java面向对象小知识

    (一).面向对象的由来: 1.60年中期软件危机(software crisis)--落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现的一系列严重问题的现象. 软禁 ...

  9. Java面向对象的知识(一)

    这里通过一则历史小故事来解释什么是面向对象的思想. 帝置酒雒阳南宫.上曰:"列侯.诸将毋敢隐朕,皆言其情.我所以有天下者何?项氏之所以失天下者何?"高起.王陵对曰:"陛下 ...

  10. 上机实验3-2 Java面向对象编程(二)

    实验1 家中的电视 一.实验目的 成员变量也可能是引用类型,通过实验让学生掌握对象的组合以及参数传递 二.实验内容 编写一个Java应用程序,模拟家中买了一台电视机,家庭将电视机作为自己的一个成员.具 ...

最新文章

  1. 离线安装Visual Studio Code插件
  2. AI工程师成长记 - 工作方法!
  3. p沟道mos管导通条件_10天电子入门-MOS管
  4. 线上办公室 x 音视频会议最佳实践
  5. 前端路由(一) 路由,hash,history
  6. for循坏的穷举与迭代,while、do while循环
  7. 适合NetScaler AG部署的 WI 定制站点开发
  8. php中文网地址多少,计算机网络中有几种地址格式
  9. 大数相乘(大数阶乘模板)
  10. nssl1467-U【差分】
  11. 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin
  12. matlab 频率分布直方图_小猿圈Python开发之绘制频率分布直方图示例
  13. python自动回复_Python—itchat实现微信自动回复
  14. zblog模板php免费三栏,天兴工作室三栏布局zblog模板
  15. 人民币对美元汇率中间价报6.7969元 下调115个基点
  16. 袁春风老师:计算机系统基础(一) 第一章
  17. Android4.1.0实战教程---自动阅读小说
  18. GNN金融应用之Classifying and Understanding Financial Data Using Graph Neural Network学习笔记
  19. 【USACO Open11】forgot
  20. “第二盖茨”——马克·扎克伯格

热门文章

  1. Qt控件之toggle()、triggered()、clicked()——triggered发射信号无响应
  2. Wireshark 设置中文
  3. 【数字图像处理】Canny边缘检测C语言实现
  4. Win10更新后桌面右键反应慢的问题
  5. 如何查看计算机网络日志,电脑系统日志怎么查看 电脑怎么查看使用记录
  6. FLAGS 作用及用法
  7. Java 8?还记得那年大明湖畔的Java 7吗?
  8. linux 任意音频采样率转换
  9. JavaScript基础的全部东东
  10. Koo叔说Shader-Unity中的Shader