05团队语法

团队语法

1.抽象类 用到继承的知识

2.接口

抽象类和接口 一模一样 都是解耦的

抽象类

抽象类 用abstract修饰的类 这种类 特点 不能new对象

抽象方法 用abstract修饰的方法 这种方法只有声明部分没有实现部分

​ 1.把方法的声明和实现分开

​ 声明部分 public abstract void add();

​ 实现 去掉abstract 需要写出方法的方法体 {}

一个类中有抽象方法那么这个类必须是抽象类

public abstract class One{
    public abstract void add();   int a;
}

抽象类用自己的子类来实现自己的抽象方法

抽象类本身 不能 new

想 new,必须 先写一个子类 继承它,再 new 子类

public class Two extends One{
    public void add(){
        
    }
}

如何调用抽象类中的方法呢?

我们需要使用上转型对象来调用抽象类中的抽象方法

public class Test{
    public static void main(String [] args){
        One one = new Two();
        //one上转型对象
    }
}

上转型对象:把子类对象赋值给父类引用,这个父类引用指向的子类对象,就是上转型对象。

注:

上转型对象 3 个必记规则

  1. 只能调用父类中定义的方法
  2. 实际运行执行子类重写的方法(多态)
  3. 不能调用子类独有的方法

3的原因:

编译阶段,编译器只看左边的类型(AbstractOne)

父类里没有这个子类独有的方法

编译器直接报错:找不到方法

哪怕运行时是子类对象,编译不通过,一切白搭。

接口

接口 由关键字 interface修饰的一个代码书写单元 == 等价与类

​ 1.接口不能new对象

​ 2.接口中必须全部是抽象方法

​ 3.接口中所有的抽象方法会默认添加 两个关键字 public abstract

public interface One{
    
    	void add1();
    
}

接口用实现类来实现自己的抽象方法 two 抽象类

public class Two implements One,其他接口{
    	public void add1(){}
}

接口中的方法如何调用

public class Test{
     public static void main(String [] args){
        //接口回调
        One one = new Two();
        
        one.
    }
    
}

1.接口弥补了单向继承的缺点 一个实现类可以实现多个接口

2.接口和接口之间允许互相继承

特殊对象(背)

1.%90对象都是正常 类类型 名 = new 构造方法() 类类型名字和构造方法名字 相同

名:你给对象起的名字

A        a     =    new 	A();

2.%5对象 上转型对象 父类声明子类实例化 父亲类型 名 = new 儿子构造方法() 给抽象类服务的

3.%5对象 接口回调 接口声明由实现类来实例化 接口类型 名 = new 实现类构造方法() 给接口用的

关键字(背)

abstract 抽象 修饰类和方法 修饰的类叫抽象类 修饰的方法叫抽象方法

interface 接口

implements 实现 用于让一个类去实现一个或多个接口

抽象类和接口 有啥区别

区别

  1. 抽象类 = 半成品类,只能单继承
  2. 接口 = 能力契约,可以多实现
  3. is a(是什么)用抽象类,can do(能做什么)用接口
  4. 抽象类可以有普通方法但接口必须全都是抽象方法 (接口:Java 8 以后也能写普通方法(default /static))

总结

  • 抽象类:模板、单继承、有属性有方法
  • 接口:规范、多实现、纯能力定义
  • 日常开发:接口用得更多(解耦、灵活、符合最佳实践)

拓展

@Override

实现接口时,在方法上写 @Override,是用来【校验】你写的方法,是不是真的正确重写了接口里的方法。

interface Run {
    void run();
}
class Dog implements Run {

    //这个注解:校验下面的方法,确实是重写接口方法
    @Override
    public void run() {
        System.out.println("小狗跑");
    }
}
@Override
public void runs() {  				// 多写了个 s
	System.out.println("小狗跑");
}

如果不写 @Override,编译器不会报错,会一直找不到 bug

posted @ 2026-10-20 20:24  瑜淞蜀  阅读(2)  评论(0)    收藏  举报