Action类:
package com.wmwx.oop.Demo08; //使用abstract声明抽象类 public abstract class Action { //抽象方法,只有方法名,没有方法体 //仅作约束,期待他人实现 public abstract void doSomething(); }A类:
package com.wmwx.oop.Demo08; public class A extends Action{ //子类必须实现父类的抽象方法 //除非该子类是抽象类 @Override public void doSomething() { } } 接口接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,通常以 interface 来声明。其基本语法如下:
[访问修饰符] interface 接口名称 [extends 其他的接口名称] { // 抽象方法 }接口的特性:
接口中每一个方法都是隐式抽象的,接口中的方法会被隐式地指定为 public abstract,并且只能是 public abstract。
接口中可以含有变量,但是接口中的变量会被隐式地指定为 public static final ,并且只能是 public static final。
接口中的方法不能在接口中实现,只能由实现接口的类来实现接口中的方法。
一个接口能继承另一个接口,使用 extends 关键字.子接口会继承父接口的方法。
当类实现接口的时候,需要实现接口中所有的方法。否则,类必须声明为抽象的类。Java中使用 implements 关键字实现接口,其基本语法如下:
class 类名 implements 方法名{ //实现接口中的抽象方法 }示例:
UserService接口:
package com.wmwx.oop.Demo09; //定义接口使用关键字interface public interface UserService { //接口中的所有属性都是public static final //一般不在接口中定义属性 int age = 60; //接口中的所有方法都是public abstract void add(String name); void delete(String name); void update(String name); void query(String name); }TimeService接口:
package com.wmwx.oop.Demo09; public interface TimeService { void timer(); }UserServiceImpl类:
package com.wmwx.oop.Demo09; //类使用关键字implements来实现接口 //实现了接口的类,需要重写接口的所有方法 //一个类可以实现多个接口 public class UserServiceImpl implements UserService, TimeService{ @Override public void add(String name) { } @Override public void delete(String name) { } @Override public void update(String name) { } @Override public void query(String name) { } @Override public void timer() { } } 内部类所谓内部类,就是在一个类的内部再定义一个类。
示例:
Outer类:
package com.wmwx.oop.Demo10; //外部类 public class Outer { private int id=10; public void out(){ System.out.println("这是外部类的方法!"); } public class Inner{ public void in(){ System.out.println("这是内部类的方法!"); } //获得外部类的私有属性 public int getId(){ return id; } } public void method(){ //局部内部类,在外部类的方法之中 class Inner{ } } } //一个java文件可以有多个class,但是只能有一个public class class A{ }Application类:
package com.wmwx.oop; import com.wmwx.oop.Demo09.UserService; import com.wmwx.oop.Demo10.Outer; //启动类 public class Application { public static void main(String[] args) { //外部类使用new关键字 Outer outer = new Outer(); outer.out(); //内部类通过外部类来实例化 Outer.Inner inner = outer.new Inner(); inner.in(); System.out.println(inner.getId()); //匿名类,不用将实例保存到变量中 new Outer().out(); //使用匿名类实现接口 UserService userService = new UserService() { @Override public void add(String name) { } @Override public void delete(String name) { } @Override public void update(String name) { } @Override public void query(String name) { } } } } Java异常机制 异常异常是程序中的一些错误。但并不是所有的错误都是异常,并且错误有时候是可以避免的。
异常的分类:
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误(Error): 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,在编译时同样检查不到。
示例:
package com.wmwx.exception; public class Demo01 { public static void main(String[] args) { new Demo01().a(); //抛出异常:StackOverflowError System.out.println(11/0); //抛出异常:ArithmeticException System.out.println() //抛出异常:Error } public void a(){ b(); } public void b(){ a(); } } 异常体系结构