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. CentOS7 安装rz和sz命令,安装netstat

    yum install lrzsz CentOS7 安装netstat命令 yum install net-tools

  2. centos7在Evolution中配置163邮箱,被阻止收件解决方法

    config.mail.163.com/settings/imap/login.jsp?uid=xxxx@163.com

  3. 【Oracle】如何让一个用户能够访问另外一个用户下所有的表

    根据需求的不同,也分为好几种方法,且看下文. 先构造基本的环境:创建两个用户AA,BB,基本需求为用户AA能够访问用户BB下所有的表,即用户AA有对BB下所有的表有"select on&qu ...

  4. (私人收藏)2019科协WER解决方案

    2019科协WER解决方案 含地图,解决程序,详细规则,搭建方案EV3;乐高;机器人比赛;能力风暴;WER https://pan.baidu.com/s/16sdFmM49bPijYw55i8ox1 ...

  5. kubernetes-pod驱逐机制

    1.驱逐策略 kubelet持续监控主机的资源使用情况,并尽量防止计算资源被耗尽.一旦出现资源紧缺的迹象,kubelet就会主动终止部分pod的运行,以回收资源. 2.驱逐信号 以下是一些kubele ...

  6. kibana限制用户只具备读图的权限

    假设需求 因为业务需要将日志系统收集到的信息进行图表化展示并交付到用户进行业务交流. 解决方案 这个需求看着似乎蛮简单的,如何解决? 1.对需要的数据进行过滤制作图表 2.对用户的权限限制为只读级别, ...

  7. Freemarker 使用记录

    1.数字超过1000时会有逗号  ,设置数据格式 <#setting number_format="#"> 2.数据叠加 求总计: 1)定义变量:<#assign ...

  8. day53 作业

    写一个博客首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. 数据可视化基础专题(三):Pandas基础(二) csv导入与导出

    1.csv导入 1.1 csv导入 .read_csv()函数 pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~Any ...

  10. Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

    Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...