[关闭]
@nextleaf 2018-08-13T08:58:50.000000Z 字数 3145 阅读 1082

2018-08-13 工作日志

Java 工作日志


清单

Keep:今日完成了哪些工作

Problem:遇到了什么问题?

子类也属于父类

Try:准备尝试哪些措施

Plan:明日的任务


上午

1. 抽象类

2. 接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

2.1 接口与类相似点:

一个接口可以有多个方法。
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
接口的字节码文件保存在 .class 结尾的文件中。
接口相应的字节码文件必须在与包名称相匹配的目录结构中。

2.2 接口与类的区别:

接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。

2.3 接口特性:

接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

2.4 抽象类和接口的区别:

1). 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2). 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3). 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4). 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2.5 接口的多继承:

在Java中,类的多继承是不合法,但接口允许多继承。

public interface C extends A, B

2.6 标记接口

标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。
标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。
标记接口主要用于以下两种目的:

①建立一个公共的父接口:
正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
②向一个类添加数据类型:
这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。


下午

接口

程序实例--防盗锁(Door\Alarm\PanDoor\DanDoor)

Alarm

  1. package com.nl.sx813.insterfaceDemo.insterfacepractice;
  2. public interface Alarm {
  3. void alarm();
  4. }

Door

  1. package com.nl.sx813.insterfaceDemo.insterfacepractice;
  2. public abstract class Door{
  3. void open(){};
  4. void close(){};
  5. }

PanDoor

  1. package com.nl.sx813.insterfaceDemo.insterfacepractice;
  2. public class PanDoor extends Door implements Alarm {
  3. public static void main(String[] args){
  4. Door door=new PanDoor();
  5. Door door1=new DanDoor();
  6. ((PanDoor) door).open();
  7. ((PanDoor) door).alarm();
  8. ((PanDoor) door).close();
  9. System.out.println();
  10. door1.open();
  11. door1.close();
  12. ((DanDoor) door1).alarm();
  13. }
  14. @Override
  15. public void alarm() {
  16. System.out.println("pan alarm");
  17. }
  18. @Override
  19. public void open() {
  20. System.out.println("pan open");
  21. }
  22. @Override
  23. public void close() {
  24. System.out.println("pan close");
  25. }
  26. }
  27. class DanDoor extends Door implements Alarm{
  28. @Override
  29. void open() {
  30. System.out.println("Dan open");
  31. }
  32. @Override
  33. void close() {
  34. System.out.println("Dan close");
  35. }
  36. @Override
  37. public void alarm() {
  38. System.out.println("dan alarm");
  39. }
  40. }

子类也属于父类[^inheritance]

  1. package com.nl.sx809.inheritance;
  2. public class Father {
  3. public static void main(String[] args) {
  4. Father f = new Father();
  5. Son s = new Son();
  6. //子类也属于父类
  7. if (s instanceof Father)
  8. System.out.println("对的✔");
  9. }
  10. }
  11. class Son extends Father {}

Math

  1. package com.nl.sx813.mathDemo;
  2. /**
  3. * Created with IntelliJ IDEA 2018.
  4. * Description:
  5. * Author: 黄昭鸿
  6. * Date: 2018-08-13
  7. * Time: 16:28
  8. */
  9. public class MathDemo {
  10. public static void main(String[] args){
  11. //绝对值
  12. System.out.println(Math.abs(-10));
  13. //Π
  14. System.out.println(Math.PI);
  15. //e
  16. System.out.println(Math.E);
  17. //向上取整
  18. System.out.println(Math.ceil(Math.PI));
  19. //向下取整
  20. System.out.println(Math.floor(Math.PI));
  21. //四舍五入取整
  22. System.out.println(Math.round(Math.PI));
  23. //开方
  24. System.out.println(Math.sqrt(16));
  25. //幂,2的4次方
  26. System.out.println(Math.pow(2,4));
  27. //随机小数
  28. System.out.println(Math.random());
  29. }
  30. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注