抽象 接口 静态代理

  • 抽象类
  1. 专门是用来被继承的
  2. 语法 : 抽象类不可以被直接实例化,抽象类可以拥有抽象方法

  3. 抽象类不可以被final继承
 1 public abstract class testPM {
 2     String name;
 3     
 4     public testPM(String name) {
 5         this.name = name;
 6     }
 7     //定义抽象方法
 8     //抽象方法专门被用来重写的
 9     //不需要代码的具体实现 :用{} 后面跟个分号就行了
10     public abstract void study();
11     
12     public void study(int day) {
13         
14     }
15 }

 抽象类继承抽象类

 1 public class abtest extends testPM{
 2     //继承自抽象类 必须实现抽象类里面的所有抽象方法
 3     @Override
 4     public void study() {
 5         
 6     }
 7     
 8     //如果抽象类里面没有无参构造,必须指明调用哪个有参构造
 9     public abtest() {
10         super("");
11     }
12 }

 实体类继承抽象类

 1 package day06;
 2 
 3 public abstract class abtest2 extends testPM{
 4     public abtest2() {
 5         // TODO Auto-generated constructor stub
 6         super("");
 7     }
 8     
 9     @Override
10     public void study() {
11         // TODO Auto-generated method stub
12         
13     }
14 }

 

  • 接口
  1. 使用关键字interface声明接口
  2. 作用 : 对所有子类的方法(行为)进行规范
  3. 接口不能直接实例化对象
  4. 接口中不能有构造方法
  • 声明方法:接口中声明的方法默认使用public abstract修饰
1     public abstract void test();
2     //void test1(); //也可以
  • 声明属性 : 在接口中的属性默认是public static final
1     String a = "";
2     //public static final String b = "";
  • 实体方法
  • 接口只能声明default访问类型的实体方法
1     void f();
2     default void t() {}

 

public interface Truck {
    //接口
    //使用关键字interface声明接口
    //作用 : 对所有子类的方法(行为)进行规范
    //接口不能直接实例化对象
    //接口中不能有构造方法
    
    
    //声明方法:接口中声明的方法默认使用public abstract修饰
    public abstract void test();
    //void test1(); //也可以
    
    //声明属性 : 在接口中的属性默认是public static final
    String a = "";
    //public static final String b = "";
    
    //实体方法
    //接口只能声明default访问类型的实体方法
    void f();
    default void t() {}
    
}
1 public interface Truck2 {
2     String a = "";
3     default void f() {}
4     default void t() {}
5 }

 

 1 package day06;
 2 
 3 public class BigTruck implements Truck,Truck2{
 4     //使用implements实现接口
 5     //实现类必须重写,接口中的抽象方法
 6     //java中支持多实现,使用逗号隔开
 7     //抽象犯法重名可以,但是提方法重名就不行
 8     
 9     @Override
10     public void test() {
11         // TODO Auto-generated method stub
12         
13     }
14 
15     @Override
16     public void f() {
17         // TODO Auto-generated method stub
18         this.t();
19     }
20 
21     @Override
22     public void t() {
23         // TODO Auto-generated method stub
24         Truck.super.t();
25     }
26     
27     
28 }

 

  1. 声明一个图形接口,有个画图的方法
  2. 三个实现类,矩形,圆形,三角形
  3. 编辑一个测试方法,从控制台输入所需的图形
  4. 调用指定类实例,调用指定类实例的画图方法
 1 package day06;
 2 
 3 import java.util.Scanner;
 4 
 5 public class GraphTest {
 6     public static void main(String[] args) {
 7         System.out.println("开始你的表演!");
 8         Scanner sc = new Scanner(System.in);
 9         String inputString = sc.next();
10         if(inputString.equals("三角形")) {
11             Triangle triangle = new Triangle();
12             triangle.draw();
13         }
14         else if (inputString.equals("矩形")) {
15             Rectangle rectangle = new Rectangle();
16             rectangle.draw();
17         }
18         else if (inputString.equals("圆形")) {
19             Round round = new Round();
20             round.draw();
21         }
22         else {
23             System.out.println("输入有误,请重新输入");
24         }
25     }
26 }

 

1 package day06;
2 
3 public interface Graph {
4     public abstract void draw();
5 }

 

package day06;

public class Round implements Graph{
    public void draw() {
        // TODO Auto-generated method stub
        System.out.println("wow! 你打印了一个圆形");
    }
}

 

1 package day06;
2 
3 public class Triangle implements Graph{
4     public void draw() {
5         // TODO Auto-generated method stub
6         System.out.println("wow! 你打印了一个三角形");
7     }
8 }

 

1 package day06;
2 
3 public class Rectangle implements Graph{
4     public void draw() {
5         // TODO Auto-generated method stub
6         System.out.println("wow! 你打印了一个矩形");
7     }
8 }

 

  • 静态代理
  • 生产者和代理者都实现了同一个接口
  • 代理者对生产者进行了一个调用
 1 package day06;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         Rectangle rect=new Rectangle();
 6         Shape rp=new RectangleProxy(rect);
 7         String str=rp.draw();
 8         System.out.println(str);
 9     }
10 }

 

1 package day06;
2 
3 public interface Shape {
4 
5     String draw();
6 }

 

 1 package day06;
 2 
 3 public class RectangleProxy implements Shape {
 4     private Rectangle rect;
 5     
 6     
 7     public RectangleProxy(Rectangle rect) {
 8         super();
 9         this.rect = rect;
10     }
11 
12 
13     @Override
14     public String draw() {
15         // TODO Auto-generated method stub
16         String s=rect.draw();
17         System.out.println("对"+s+"进行涂色");
18         return "涂色后的"+s;
19     }
20 
21 }

 

 1 package day06;
 2 
 3 public class Rectangle implements Shape {
 4 
 5     @Override
 6     public String draw() {
 7         // TODO Auto-generated method stub
 8         System.out.println("画出一个矩形");
 9         return "矩形";
10     }
11 
12 }

 

posted @ 2022-01-17 20:32  Nickeyhu  阅读(34)  评论(0编辑  收藏  举报