Java面向对象oopDay4

本文详细介绍了Java编程中的抽象类、设计模式(模板模式和单例模式)以及final关键字和接口的概念和应用。抽象类不能实例化,包含抽象方法;模板模式提供通用架构,子类只需实现特定部分;单例模式确保类只有一个实例;final修饰类、变量和方法,确保不变性;接口定义公共规范,实现多继承。同时探讨了JDK不同版本中抽象类和接口的访问权限变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象类、设计模式(模板模式和单例模式)、final关键词、接口(interface)



一、抽象类
1.概念
  有abstract修饰的类,称之为抽象类,抽象类中包含抽象方法的.
2.abstract关键词
  1)修饰类 - 抽象类
  特点:
   a.抽象类不能实例化,也就是不能new对象,只能new非抽象的子类.
   b.如果一个类包含抽象方法,那么这个类一定是抽象类.
   c.子类继承抽象父类,必须实现父类中所有的抽象方法,否者将子类变抽象类.

  2)修饰方法 - 抽象方法
   a.格式:
     访问修饰符 abstract 返回值类型 方法名();
      ps: public abstract void m1();
    b.特点:抽象方法没有方法体
    
  3)修饰变量 - 不能修饰变量

二、设计模式
1.概念
  软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

2.模板模式
  特点: 
    模板模式的优势是,模板已经定义好了通用架构,使用者只需要关心自己需要实现的功能即可.
  案例:
    新司机:
      开车:开门,点火,关门,[双手握住方向盘],熄火,停车
    老司机:
      开车:开门,点火,关门,[不用手握方向盘],熄火,停车

3.单例模式
1)概念
  单例模式是一种常用的设计模式,通过单例模式可以保证整个系统中,一个类只存在一个实例对象. 
2)单例模式类型
  a.饿汉模式
    在没有适用对象之前,就已经创建好对象
  b.懒汉模式
    在需要使用对象时,在进行创建

3)实现步骤:
 
  a.将构造方法私有化,让它不能在类的外部使用new关键词创建对象
   private static final 对象类 实例名 = new 对象类();  //饿汉模式
   private static 对象类 实例名;                      //懒汉模式
  
  b.在该类内部产生一个唯一的实例化对象,并且封装为private static类型的成员变量
   private 对象类(){
}
  
  c.定义一个静态方法返回唯一对象
   public static 对象类 getIntance(){
       return 实例名;
}                                      //饿汉模式

   public static 对象类 getIntance(){
        return new 对象类;
}                                      //懒人模式

d.创建单例对象
  
  对象类 实例名 =对象类.getIntance();
  实例名.成员变量 = 数据类型;

三、final关键词: 最终的,最后的
1.修饰类: 不可被继承
2.修饰成员变量: 不可变改变
注意:
  成员变量定义时,不一定需要进行初始化操作,因为有默认初始化
  final修饰的成员变量,一定要进行初始化操作
  初始化位置有哪些?
     1.声明的同时初始化     
    final int age = 10;
     2.构造方法 
    final int a;    
    public Demo02Variable() {
        a = 10;
    }

    public Demo02Variable(int a) {
        this.a = a;
    }
}           
     3.代码块
    final int b;
   {
    b = 20;
    }
3.修饰成员方法: 不可被重写
4.修饰局部变量:
    基本类型: 值不可改变
    引用类型: 地址值不可改变

四、接口(interface)
1.概念
  接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。

2.格式定义
  访问修饰符 interface 接口名称{}
  静态常量:全大写多个单词用_连接,如:
public final static int MAX_VALUE =1000;
  抽象方法:
public abstract void m1(); // 完整写法
abstract void m2();
public void m3();
void m4();
  
  实现类:
  访问修饰符 class 实现类名(接口名Impl) implements 接口名{}
public void m1() {修改的方法}
public void m2() {修改的方法}
public void m3() {修改的方法}
public void m4() {修改的方法}

  注意事项:
    a.不能new接口,只能new接口的实现类
接口名 实例名 = new 实现类名();
实例名.方法名;
    b.实现接口就必须实现接口中所有的抽象方法 (m1,m2,m3,m4相互对应)

3.接口的使用
1)JDK1.7版本
  公开的静态常量
  公开的抽象方法
2)JDK1.8版本
  默认方法:
    a.default修饰词必须添加,用于表示默认方法,不是表示访问修饰符
    b.public修饰词是可以省略不写
    可以选择进行方法重写
  静态方法
    a.public修饰词是可以省略不写
    b.属于接口的,通过接口直接调用. 
      调用方式: 接口名.方法名
     不可以进行方法重写
3)JDK1.9版本
  私有方法(静态私有/普通私有)
    静态私有: 提取静态方法中共有部分内容
    普通私有: 提取默认方法中共有部分内容
4.类和接口
  类和类: 1 v 1 单继承
  类和接口: 1 v n 多实现
  接口和接口: 1 v n 多继承
  接口和类: 没有

5.接口作为方法参数 / 返回值使用
  作为方法参数:可以传所有实现类对象,所以具体使用的都是接口的实现类对象
  作为返回值使用:可以返回所有实现类对象,所以具体使用的都是接口的实现类对象

访问权限默认值

关于抽象类

JDK 1.8以前,抽象类的方法默认访问权限为protected

JDK 1.8时,抽象类的方法默认访问权限变为default

关于接口

JDK 1.8以前,接口中的方法必须是public的

JDK 1.8时,接口中的方法可以是public的,也可以是default的

JDK 1.9时,接口中的方法可以是private的




面试题: (重要)
1.接口和抽象类的区别
  a.解释什么是接口和抽象类
  b.从语法上/使用方式上分析两个的区别
  c.使用场景
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值