Day30.接口、内部类 -Java面向对象OOP

tech2022-08-02  128

接口

普通类:只有具体实现

抽象类:具体实现和规范(抽象方法)都有

接口:只有规范,自己无法写方法;专业的约束;约束和实现分离:面向接口编程

//TimeService接口 public interface TimeService { void timer(); } //UserService接口 //抽象的思维 //interface 定义的关键字 接口都需要有实现类 public interface UserService { public abstract void run();//--->void run(); 注意左边的public abstract是灰色的,正常可以直接这么写void run() //常量 public static final int age = 66; //接口中的所有定义的方法其实都是抽象的 public abstract void add(String name); void delete(String name); void update(String name); void query(String name); } //UserServiceImpl接口(实现接口) // 抽象类: extends // 类 可以实现接口 通过implements 接口 // 实现接口的类,就需要重写接口中的方法 // 多继承;利用接口实现多继承; public class UserServiceImpl implements UserService,TimeService{//接口可以实现尾多继承 @Override public void run() {//UserService接口重写的方法 } @Override public void add(String name) {//UserService接口重写的方法 } @Override public void delete(String name) {//UserService接口重写的方法 } @Override public void update(String name) {//UserService接口重写的方法 } @Override public void query(String name) {//UserService接口重写的方法 } @Override public void timer() {//TimeService接口重写的方法 } } 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想,如果你是天使,则必须能飞。如果你是骑车,则必须能跑。如果你是好人,则必须干掉坏人;如果你是坏人,则必须欺负好人声明类的关键字是class,声明接口的关键字是interface接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++,java、c#等),就是因为设计模式所研究的,实际上就是如何合理去抽象。 /* 接口的作用: 1. 约束 2. 定义一些方法,让不同的人实现 10个人---> 完成实现1个接口 (有10种不同的的实现方式) 3. 方法修饰符:public abstract(一般可以省略) 4. public static final静态常量 5. 接口不能被实例化,因为接口中没有构造方法 6. 用通过implements来实现多个接口 7. 通过implements来实现的接口必须要重写接口中的方法 */

. . .

内部类

内部类就是一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就是成为内部类,而A类相对B类来说就是外部类。

一个java类中可以有多个class类,但是只能有一个public class

成员内部类

//成员类 public class Outer { private int id = 20; public void out(){ System.out.println("这是外部类方法"); } //内部类可以直接访问外部类的东西 public class Inner{ public void in(){ System.out.println("这是内部类方法"); } //获得外部类的私有属性 public void getID(){ System.out.println(id); } } } //测试框 public class Application { public static void main(String[] args) { Outer outer = new Outer();//new一个外部类 outer.out();//这是外部类方法 //通过外部类来实例化内部类 Outer.Inner inner = outer.new Inner(); inner.in();//这是内部类方法 inner.getID(); } }

静态内部类(加上static修饰符)

​ 静态内部类无法访问非静态的属性

局部内部类

public class Outer { //局部内部类--- 有点类似与局部变量 public void method(){ class Inner{ } } } 匿名内部类 public class Test { public static void main(String[] args) { //没有名字初始化类,不用将实例保存到变量中 new Apple().eat();//匿名局部类 没有变量名 } } class Apple{ public void eat(){ System.out.println("吃苹果"); } }
最新回复(0)