个人博客网:https://wushaopei.github.io/    (你想要这里多有)

1、关键字 abstract

1.1.abstract可以修饰:类,方法

1.2.abstract修饰方法 :

  1. 抽像方法没方法体
  2. 非抽像类继承抽像类 必须重写抽像类中的所有抽像方法(包括间接抽像父类)父类如果重写了间接抽像父类中的抽像方法,那么非抽像子类可以不用再重写该方法
  3. 如果非抽像子类不想抽写抽像类中的抽像方法

①那么该类只能也被声明成抽像类

②父类全部重写抽像方法

abstract修饰类:

  1. 抽像类不能被实例化
  2. 思考:抽像类构造器吗? 抽像类是有构造器的 因为要实现 子类对象的实例化过程。
  3. 抽像方法所在的类必须是抽像类

1.4.abstrcat不可以和哪些关键字一起使用

    final,static,private

1.5:代码

/*
* 几何图形
* 1.抽像类可以继承非抽像类
*/
abstract class GeometricObject extends A {
//抽像类是构造器的因为 要实现 子类对象的实例化过程
public GeometricObject(){
System.out.println("GeometricObject()");
} @Override
public void test() { }
//抽像方法没方法体
public abstract void findArea();
} //如果非抽像子类不想抽写抽像类中的抽像方法,那么该类只能也被声明成抽像类
class Triangle extends GeometricObject{ //非抽像类继承抽像类 必须重写抽像类中的所有抽像方法(包括间接抽像父类)
//抽像父类如果重写了间接抽像父类的抽像方法 ①那么该类只能也被声明成抽像类 ②父类全部重写抽像方法
@Override
public void findArea() { }
}

2、模板方法的设计模式

/*
* 模板设计模式:
*
*
* 需求 : 计算代码运行的时间
*
*/
abstract class Computer{ public void codeTime(){ long start = System.currentTimeMillis();
//将可变的代码抽成抽像方法,具体的实现由子类去实现
runCode(); long end = System.currentTimeMillis(); System.out.println("time = " + (end - start));
} public abstract void runCode();
} class RunNumber extends Computer{ @Override
public void runCode() { for (int i = 0; i < 1000; i++) {
if(i % 2 == 0){
System.out.println(i);
}
}
}
}

3、关键字:interface

3.1 接口的声明格式 :

权限修饰符(public,缺省的 interface 接口名{}

3.2 说明
   1.接口声明的格式 :权限修饰符(public和缺省的)   interface  接口名{}
   2.接口和类是并列的关系。
   3.jdk1.8之前接口中只能定义 - 抽像方法和常量
   4.类和类的关系是继承 (单继承)
      类和接口的关系是实现关系(多实现 例   A implments English,Math接口和接口的关系是继承关系(多继承
   5.接口中没构造器 - 不能创建接口的实例
   6.接口与实现类的多态性(详见InterfaceTest2.java)
3.3:接口和类的多态性

class Computer{

    public void runUSB(USB usb){
usb.start();
System.out.println("-----------工作中-------------");
usb.close();
} public void runBluetooth(Bluetooth bt){
bt.connect();
System.out.println("--------连接中--------------");
bt.disConnect();
}
} interface USB{ void start();
void close();
} interface Bluetooth{
void connect();
void disConnect();
} class Printer implements USB,Bluetooth{ @Override
public void start() {
System.out.println("打印机开始工作了.....");
} @Override
public void close() {
System.out.println("打印机停止工作了....");
} @Override
public void connect() {
System.out.println("打印机已经连接蓝牙.....");
} @Override
public void disConnect() {
System.out.println("打印机已经断开蓝牙.....");
} } class Mouse implements USB,Bluetooth{
@Override
public void connect() {
System.out.println("鼠标已经连接蓝牙.....");
} @Override
public void disConnect() {
System.out.println("鼠标已经断开蓝牙.....");
} @Override
public void start() {
System.out.println("鼠标开始开作了....");
} @Override
public void close() {
System.out.println("鼠标停止工作了....");
}
}

面试题: 关于abstract 和 interface 的关系

(1)abstract类其实和普通类一样,拥有有自己的数据成员和方法,只不过abstract类里面可以定义抽象abstract的方法(声明为abstract的类也可以不定义abstract的方法,直接当做普通类使用,但是这样就失去了抽象类的意义)。

(2)一个类中声明了abstract的方法,该类必须声明为abstract类。

(3)interface中只能定义常量和抽象方法。在接口中,我们定义的变量默认为public static final类型,所以不可以在显示类中修改interface中的变量;定义的方法默认为public abstract,其中abstract可以不明确写出。

4、关键字:工厂方法的设计模式

interface IWorkFactory{
Work getWork();
}
class TeacherWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new TeacherWork();
}
} class StudentWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new StudentWork();
}
} interface Work{
void doWork();
} class StudentWork implements Work{
@Override
public void doWork() {
System.out.println("学生就要好好学习");
}
} class TeacherWork implements Work{
@Override
public void doWork() {
System.out.println("老师就要好好教学生学习,不学就打");
}
}

5、关键字:内部类

5.1 定义 : 在一个类A的内部再声明一个类B,类A叫做外部类,类B叫做内部类

5.2 内部类的分类
内部类 : 成员内部类   vs  局部内部类
成员内部类 : 静态成员内部类  vs 非静态成员内部类

5.3 说明
内部类作为成员来说:

  1. 可以使用四种权限修饰符
  2. 可以使用static修饰

内部类作为类来说:

  1. 类内部可以,构造器,属性,代码块
  2. 可以被继承

5.4 如何创建内部类对象

静态内部类 : new 外部类的类名.静态内部类的类名()
非静态内部类 :new 外部类的类名().new 非静态内部类的类名()

5.5 如何调用外部类的成员

静态内部类 :外部类的类名.类变量的名字、静态方法名
非静态内部类 :外部类的类名.this.属性名、方法名

5.6 局部内部类

  1. 在方法内再定义一个类。
  2. 如何返回内部类的对象?

①可以通过创建一个接口,让局部内部类实现该接口。
       ②方法的返回值类型为该接口的类型
       ③创建局部内部类的对象并返回

        public AA getInnerClass(){
//局部内部类
class C implements AA{
@Override
public void show(){
System.out.println("inner class");
}
} C c = new C();
return c;
}
interface AA{
void show();
}

6、关键字:枚举

6.1 定义

如果一个类的对象是有限的,可数多个的这样的类叫做枚举类

6.2 如何自定义枚举类

class Season{
//ctrl + shift + x 所字母变成大写
//ctrl + shift + y 所字母变成小写
private final String SEASONNAME;
private final String SEASONDES;
//私化构造器
private Season(String SEASONNAME,String SEASONDES){
this.SEASONDES = SEASONDES;
this.SEASONNAME = SEASONNAME;
} //创建四个对象
public static final Season SPRING = new Season("春天","春眠不觉晓");
public static final Season SUMMER = new Season("夏天","夏天蚊子咬");
public static final Season AUTUMN = new Season("秋天","秋天扫落叶");
public static final Season WINTER = new Season("冬天","冬天穿棉袄"); public String getSeasonName() {
return SEASONNAME;
}
public String getSeasonDes() {
return SEASONDES;
}
}

6.3 如何使用enum关键字定义枚举类

enum Season10{
//创建四个对象。注意 :创建的对象必须放在首行
SPRING,
SUMMER,
AUTUMN,
WINTER;
}

6.4 常用API

6.5 枚举的对象实现接口中的方法

enum Season3 implements Show{
//创建四个对象。注意 :创建的对象必须放在首行
SPRING{
@Override
public void info() {
System.out.println("春天");
}
},
SUMMER{
@Override
public void info() {
System.out.println("夏天");
}
},
AUTUMN{
@Override
public void info() {
System.out.println("秋天");
}
},
WINTER{
@Override
public void info() {
System.out.println("冬天");
}
};
}

7、关键字 : 注解

7.1 定义:注解可以用来对类中的结构(属性,方法,类,构造器...)进行补充说明,而不改变原有的结构。

7.2 JDK内置的个注解

自定义注解
格式 : 权限修饰符(public,缺省的 @interface 注解名{
          int age() default 10;
}
代码:

@interface MyAnn2{
String name();
int age() default 20; //给这个属性赋值一个默认值为20,这样就可以再加注解时不用再强行进行赋值
}

7.4 元注解

@Target : 用来限制说明注解可以用在类中的哪些结构上。
@Retention :
            SORUCE(了解): 源文件 - 编译期间 (现在直接丢弃了这种策略)
            CLASS(了解): 编译期间 - 运行期间
            RUNTIME: 运行期间 (如果需要通过反射获取该注解的信息,那么该注解必须是Runtime)

//下面两个知道即可
@Documented : 该注解是否能被javadoc所解析
@Inherited : 该注解是否可以被继承。

JAVASE(十一) 高级类特性: abstract 、模板模式、interface、内部类、枚举、注解的更多相关文章

  1. Java【第八篇】面向对象之高级类特性

    static 关键字 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用.我们有 ...

  2. 高级类特性----抽象类(abstract class)

    抽象类(abstract class) 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用.类的设计应该保证父类和子类能够共享特征.有时将一个父类设计得非常抽象,以至于它没有具 ...

  3. Java高级类特性(二)

    一.static关键字 static关键字用来声明成员属于类,而不是属于类的对象.1). static (类)变量类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来. static变量也称作 ...

  4. 高级类特性----static关键字

    static 关键字 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用. 我们 ...

  5. Java高级类特性(一)

    一.继承性 1)继承的使用:权限修饰符 class A extends B{}:2)子类:A 父类(基类 SuperClass):B3)子类继承父类后,父类中声明的属性.方法,子类都可以获取到明确:当 ...

  6. 高级类特性----接口(intertface)

    接 口 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法.但是,Java不支持多重继承.有了接口,就可以得到多重继承的效果. 接口(interface)是抽象方法和常量值的定义的集合. 从本 ...

  7. Java SE学习笔记 --->高级类特性 ---> toString() 方法

    概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...

  8. 高级类特性----final关键字

    final 关键字 在Java中声明类.属性和方法时,可使用关键字final来修饰. final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次. final标记的类不能被继承.提高安全性,提 ...

  9. 设计模式学习-使用go实现模板模式

    模板模式 定义 模板模式的作用 优点 缺点 适用范围 代码实现 回调 模板模式 VS 回调 参考 模板模式 定义 模板模式(TemplateMethod):定义一个操作中的算法骨架,而将一些步骤延迟到 ...

随机推荐

  1. 玩转FPGA边缘视觉——4k视频图像抓取

    随着现代图像及视频处理技术的不断发展,人们对图像处理提出了新的要求,最近几年,图像的分辨率和扫描频率都有了较大范围的提升,1080P分辨率的视频已经非常流行,2K甚至4K分辨率的图像也在火热发展中. ...

  2. nodejs开发准备工作(2)

    (1)安装express: (2)安装好express后命令行执行express --version出现express不是内部或外部命令,也不是可运行的程序或批处理文件的问题可能是因为express4 ...

  3. 「从零单排HBase 10」HBase集群多租户实践

    在HBase1.1.0发布之前,HBase同一集群上的用户.表都是平等的,大家平等共用集群资源.容易碰到两个问题: 一是某些业务较其他业务重要,需要在资源有限的情况下优先保证核心重要业务的正常运行 二 ...

  4. requestAnimationFrame/cancelAnimationFrame——性能更好的js动画实现方式

    用js来实现动画,我们一般是借助setTimeout或setInterval这两个函数,css3动画出来后,我们又可以使用css3来实现动画了,而且性能和流畅度也得到了很大的提升.但是css3动画还是 ...

  5. 通过PAML中的CODEML模块计算dnds的过程以及踩坑

    最近帮女朋友做毕业设计的时候用到了 PAML这个软件的codeml功能,发现网上相关的资料很少,于是把自己踩的一些坑分享一下,希望能帮到其他有相同困难的人 一.下载与安装 PAML软件下载地址 htt ...

  6. 移动端APP自动化测试超全基础汇总

    目录 一.面试过程 1.自动化岗位要求 2.面试流程,面试类型 3.沟通技巧,不同级别要求 二.真实面试案例 1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么) 三.自我分析 1. ...

  7. 我的linux学习日记day8

    链接文件 linux中链接有两种,一种是硬链接,一种是软链接 一.硬链接 硬链接是指通过索引节点来进行链接创建硬链接的方法如下:ln 源文件 硬链接文件具有相同inode号的多个文件互为硬链接文件删除 ...

  8. Abp领域事件(EventBus)源码解析

    Abp中使用EventBus来解耦领域中的业务逻辑,也是订阅-发布模式的一种实现.简单来说就是,当我触发一个事件,注册了这个事件的处理器就会被找到并执行. 先看看整体代码结构 其中Entities文件 ...

  9. linux 被入侵后扫尾工作

    比较恶心,安装了后门,还把ssh sshd 给改了,服务器在机房,还不大好处理,如果贸然上去改,还容易把自己关在外面. 但是我有salt ,上面可以用cmd.run运行一切命令.不走sshd服务. l ...

  10. yield与park的区别

    yield表示放弃本次cpu的时间片,但是操作系统在下一个时间片依旧可能会调用该线程/进程 park表示线程/进程睡眠,需要让其他线程/进程唤醒,才有可能重新被操作系统分配时间片, 非自旋锁,底层一般 ...