3.1、抽象类

概述:在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了

格式:public abstract class 类名 {}

语法特点:

  1. 抽象类和抽象方法必须使用 abstract 关键字修饰
  2. 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  3. 抽象类不能实例化,要想实例化,参照多态的方式,通过子类对象实例化,这叫抽象类多态
  4. 抽象类的子类,要么重写抽象类中的所有抽象方法,要么子类也是抽象类

内部特点:

成员变量
既可以是变量
也可以是常量
构造方法
空参构造
有参构造
成员方法
抽象方法
普通方法

注意问题:

  1. 与abstract不能共存的关键字:final、private、static
final:被final修饰的类不能有子类,而被abstract修饰的类一定是一个父类
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义

3.2、接口

概述:接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用

格式:public interface 接口名 {}

语法特点:

  1. 接口用关键字interface修饰
  2. 类实现接口用implements表示
  3. 接口不能实例化,要想实例化,参照多态的方式,通过子类对象实例化,这叫接口多态
  4. 接口的子类,要么重写接口中的所有抽象方法,要么子类也是抽象类

内部特点:

成员变量
只能是常量,默认修饰符:public static final
构造方法
没有,因为接口主要是扩展功能的,而没有具体存在
成员方法
只能是抽象方法,默认修饰符:public abstract

注意问题:

  1. 抽象类和接口区别

    成员区别:
    抽象类
    变量、常量、构造方法、有抽象方法、也有非抽象方法
    接口
    常量、有抽象方法 关系区别:
    类与类的关系
    继承关系,只能单继承,支持多层继承
    类与接口的关系
    实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
    接口与接口的关系
    继承关系,可以单继承,也可以多继承 设计理念区别
    抽象类
    对类抽象,包括属性、行为
    接口
    对行为抽象,主要是行为
  2. JDK8新特性

  • 默认方法
格式:public default 返回值类型 方法名(参数列表) { }
举例:
public interface MyInter {
public default void show() {
System.out.println("Hello,World");
}
}
  • 静态方法
格式:public static 返回值类型 方法名(参数列表) { }
举例:
public interface MyInter {
public static void show() {
System.out.println("Hello,World");
}
}

3.3、内部类

概述:在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类

格式:

class Outer {
public class Inner { }
}

语法特点:

  1. 内部类可以直接访问外部类的成员,包括私有
  2. 外部类要访问内部类的成员,必须创建对象

常见分类:

成员内部类:在成员变量位置定义的内部类
外界访问成员内部类:
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
举例:Outer.Inner oi = new Outer().new Inner(); 局部内部类:在方法位置定义的内部类
外界访问局部内部类:
格式:外界是无法直接使用,需要在方法内部创建对象并使用
注意:局部内部类可以直接访问外部类的成员,也可以访问方法内的局部变量 匿名内部类:匿名内部类其实就是内部类的简写格式,他的前提是继承一个类或者实现接口
格式:new 类名 ( ) { 重写方法 }
new 接口名 ( ) { 重写方法 }
本质:是一个继承了该类或者实现了该接口的子类匿名对象

3.4、方法进阶

3.4.1、类作为方法形参和返回值

class Cat {
public void eat() {
System.out.println("猫吃鱼");
}
} class CatOperator {
public void useCat(Cat c) {
c.eat();
} public Cat getCat() {
return new Cat();
}
} public class Main {
public static void main(String[] args) {
CatOperator co = new CatOperator();
Cat c1 = new Cat();
co.useCat(c1);
Cat c2 = co.getCat();
c2.eat();
}
}

3.4.2、抽象类作为方法形参和返回值

abstract class Animal {
public abstract void eat();
} class AnimalOperator {
public void useAnimal(Animal a) {
a.eat();
} public Animal getAnimal() {
return new Cat();
}
} class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
} public class Main {
public static void main(String[] args) {
AnimalOperator ao = new AnimalOperator();
Animal a1 = new Cat();
ao.useAnimal(a1);
Animal a2 = ao.getAnimal();
a2.eat();
}
}

3.4.3、接口作为方法形参和返回值

interface Jumpping {
void jump();
} class JumppingOperator {
public void useJumpping(Jumpping j) {
j.jump();
} public Jumpping getJumpping() {
return new Cat();
}
} class Cat implements Jumpping {
@Override
public void jump() {
System.out.println("猫跳高");
}
} public class Main {
public static void main(String[] args) {
JumppingOperator jo = new JumppingOperator();
Jumpping j1 = new Cat();
jo.useJumpping(j1);
Jumpping j2 = jo.getJumpping();
j2.jump();
}
}

3.4.4、匿名内部类作为方法实参和返回值

interface Jumpping {
void jump();
} class JumppingOperator {
public void useJumpping(Jumpping j) {
j.jump();
} public Jumpping getJumpping() {
return new Jumpping() {
@Override
public void jump() {
System.out.println("猫跳高");
}
};
}
} public class Main {
public static void main(String[] args) {
JumppingOperator jo = new JumppingOperator();
jo.useJumpping(new Jumpping() {
@Override
public void jump() {
System.out.println("猫跳高");
}
});
jo.getJumpping().jump();
}
}

第三章 Java面向对象(下)的更多相关文章

  1. 第三章 Java面向对象(上)

    3.1.概述 概述:面向对象是相对面向过程而言,面向对象和面向过程都是一种思想,面向过程强调的是功能行为,面向对象则是将功能封装进对象,强调具备功能的对象,面向对象是基于面向过程的.面向对象的三大特征 ...

  2. 2017-2018-2 20165318 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165318 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄  ...

  3. 20155218 《Java程序设计》实验三(Java面向对象程序设计)实验报告

    20155218 <Java程序设计>实验三(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)编码标准 在IDEA中使用工具(Code->Reformate Code) ...

  4. 实验三《Java面向对象程序设计》实验报告

    20162308 实验三<Java面向对象程序设计>实验报告 实验内容 XP基础 XP核心实践 IDEA工具学习 密码学算法基础 实验步骤 (一)Refactor/Reformat使用 p ...

  5. 2017-2018-2 20165236 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165236 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计            班级:1652 姓名:郭金涛     ...

  6. 20155201 实验三《Java面向对象程序设计》实验报告

    20155201 实验三<Java面向对象程序设计>实验报告 一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门 ...

  7. 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165301 实验三<Java面向对象程序设计>实验报告 一.敏捷开发与XP实践-1 实验要求: 在IDEA中使用工具(Code->Reformate C ...

  8. (第三章)Java内存模型(下)

    一.happens-before happens-before是JMM最核心的概念.对于Java程序员来说,理解happens-before是理解JMM的关键. 1.1 JMM的设计 从JMM设计者的 ...

  9. 第三记 Java面向对象

    相信很多人都有听到,见到这么一句话:Java是一门面向对象编程的语言,但是又是否对这句话有了自己的理解呢? 一.面向对象 面向对象是一种新兴的程序设计方法,也可以说是一种新的程序设计规范(paradi ...

随机推荐

  1. 多核CPU硬件架构介绍

    转自:http://book.51cto.com/art/201004/197196.htm SISD.MIMD.SIMD.MISD计算机的体系结构 1. 计算平台介绍 Flynn于1972年提出了计 ...

  2. iOS应用千万级架构开篇

    一款好的APP架构,是需要适应复杂的业务场景的.当然它也是可以监控的,比如性能.卡顿等.你写的每一行代码,测试都可以查看到,并测试覆盖到. 一直很想分享一下,一个大型的APP都做了些什么事情,这些事情 ...

  3. html中doctype有几种类型 以及doctype的作用

    htm中doctype标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档. dotype 的特点: <!doct ...

  4. 记一次使用elasticsearch遇到bug的探索过程

    背景: 练习一个小项目,爬取京东的数据,存到ES库中,然后读取ES库中数据,展示到页面上.效果图如下: 涉及两个接口,一个爬取写入ES接口,一个查询展示接口,当我写完代码信心满满准备看看效果的时候,调 ...

  5. 在Linux下安装zotero

    背景 系统:deepin15 zotero5.0 本来deepin的商店里是有zotero的,但貌似商店里的太老了,安装完打开之后什么功能都不能用,点击按钮没有反应.无奈之下,只能手动安装了 网上的教 ...

  6. day35 作业

    服务端 import subprocess import struct import json from socket import * server = socket(AF_INET, SOCK_S ...

  7. day12 作业

    1.通用文件copy工具实现 with open("a.txt","r",encoding="utf-8") as f ,open(&quo ...

  8. 使用Git GUI工具 上传本地仓库到 gitee码云仓库

    前言: 网上关于git的命令操作与使用很多教程和博客,在使用git工具时我发现有一个 git Gui 可视化工具,我觉得十分的亲切,由于我之前一直是使用svn作为版本控制管理工具,都是可视化操作,使用 ...

  9. MYSQL 之 JDBC(十五):数据库连接池

    在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 在主程序(如servlet.bean)中建立数据库连接 进行sql操作 断开数据库连接 这种模式开发存在各种各样的问题,最重要的是:数 ...

  10. scrapy 基础组件专题(十四):scrapy CookiesMiddleware源码

    一 Scrapy框架--cookie的获取/传递/本地保存 1. 完成模拟登陆2. 登陆成功后提取出cookie,然后保存到本地cookie.txt文件中3. 再次使用时从本地的cookie.txt中 ...