final、抽象类、接口

final关键字

关键字final是最终的意思,可以用来修饰类、方法、变量

修饰类:该类称为最终类,特点是不能被继承了

修饰方法:该方法被称为最终方法,特点是不能被重写了

修饰变量:该变量只能被赋值一次

final修饰变量的注意:

final修饰基本数据类型的变量,变量存储的数据不能被改变

final修饰引用数据类型的变量,变量存储的地址不能被改变,但地址所指向的对象的内容是可以改变的

常量:

使用了final static 修饰的成员变量就被称为常量

作用:

通常用于记录系统的配置信息

    public static final String SCHOOL_NAME  = “一起来学JAVA";

注意:常量的命名规范:建议使用大写英文单词,多个单词使用下划线连接起来

使用常量记录系统配置信息的优势、执行原理:

代码可读性更好、可维护行也更好

程序编译后,常量会被“宏替换”:出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接使用字面量的性能是一样的

抽象类

什么是抽象类

在Java中有一个关键字叫:abstract它就是抽象的意思,可以用它修饰类、成员方法。

abstract修饰类,这个类就是抽象类;

修饰方法,这个方法就是抽象方法(抽象方法只有方法签名,不能写方法体)。

抽象类的注意事项、特点:

抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

类该有的成员(成员变量、方法、构造器)抽象类都可以有

抽象类中可以有静态的main方法。可以运行

抽象类最主要的特点:

抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现

一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类

 

抽象类的应用场景和好处是什么?

两种主要的应用场景,一种是:用抽象类,我们可以把子类中相同的代码,包括方法签名都抽上来,这样能更好的支持多态,以提高代码的灵活性。

一种是:反过来用,我们不知道系统未来具体的业务实现时,我们可以先定义抽象类,将来让子类去继承实现,以方便系统的扩展。

模板方法设计模式

1、定义一个抽象类。

2、在里面定义2个方法

一个是final修饰的模板方法:把相同代码放里面去。

一个是被模板方法调用的抽象方法:具体实现交给子类完成。

public abstract double discount();

public final void shopping() {
    System.out.println("开始购物");
    System.out.println("消费" + price);
    System.out.println("打折后" + discount());
    System.out.println("购物结束,请支付");
}

接口类

用interface修饰的类就是接口

简单的说,接口就是一种被规范的标准,只要符合这个标准都可以通用,接口的表现

在于对行为的抽象。 就好比插座,每个厂商生产的插座我们都可以用,这是因为他们

有同一个标准,这里插座就是接口。

接口没有构造器,不能创建对象,接口是用来被类实现的(implements),实现接口的类称为实现类

接口里的成员变量都是 public static final 修饰的常量

接口里的成员方法一般都是抽象方法

public final int  num1=10;√
num1=20;×
int num2=10;√
num2=20;×
上面两个正确的写法等价
public  abstract  void method1();√
void  method2();√

注意事项:

类与接口的关系——一个类可以实现多个接口

但必须重写完全部接口的全部抽象方法,否则实现类需要定义为抽象类

修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {

}

接口与接口的关系——多继承【java是单继承、多层继承=>解决java中子类不能同时继承多个父类的问题】

接口的好处

弥补了类单继承的不足,类可以同时实现多个接口。

让程序可以面向接口编程,这样既不用关心实现的细节,也可以灵活方便的切换各种实现。

一个类我们说可以实现多个接口,同样,一个接口也可以被多个类实现的。这样做的好处是我们

程序就可以面向接口编程了,这样我们程序员就可以很方便的灵活切换各种业务实现了。

接口的其他细节

JDK8开始新增的三种方法【除私有方法默认被public修饰】

1、默认方法

使用default修饰,使用实现类的对象调用

2、静态方法

static修饰,必须为当前接口名调用

3、私有方法

private修饰,JDK9开始才有的,只能在接口内部使用

public interface A{
   
/**
     * 1
、默认方法(实例方法):使用用default修饰,默认会被加上public修饰。
    
* 注意:只能使用接口的实现类对象调用
    
*/
   
default void test1(){
        ...
    }

   
/**
     * 2
、私有方法:必须用private修饰(JDK 9开始才支持)
     */
   
private void test2(){
        ...
    }

   
/**
     * 3
、类方法(静态方法):使用static修饰,默认会被加上public修饰。
    
* 注意:只能用接口名来调用。
    
*/
   
static void test3(){
        ...
    }
}

关于接口的多继承

一个接口可以同时继承 多个接口

public interface C extends B , A{

}

接口的其他注意事项 (了解)

1、一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承

2、一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现

3、一个类继承了父类,又同时实现了接口,父类和接口中有同名的默认方法,实现类会优先用父类的

4、一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值