Java核心编程总结(二、抽象类与接口)


口诀: 子类继承父类,实现类实现接口

  • 类与类是继承关系

  • 类与接口是实现关系,接口是被类实现的

  • 实现接口的类称为:实现类

  • 一个类实现接口必须重写完接口中的全部抽象方法,否则这个类要定义成抽象类(一个类继承抽象类,必须重写完抽象类的所有抽象方法,否则这个类要定义成抽象类)

  • 类实现接口的格式:

修饰符 class 实现类名称 implements 接口1,接口2,接口3,…{

}

implements: 类实现接口的关键字

  • 类于类是单继承关系,类与接口是多实现关系,接口与接口是多继承关系

  • 一个类只能继承一个直接父类

  • 一个类可以同时实现多个接口

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

  • 一个类实现多个接口,必须重写完全部接口中的全部抽象方法,否则这个类要定义成抽象类

1.4JDK1.9之后(了解)


  • JDK1.8之前,接口中只能是抽象方法和常量

  • JDK1.8之后接口不再纯洁,新增了三个方法

  • 默认方法:就是实例方法

  • 必须用default修饰

  • 默认会加public修饰

  • public default void run() == default void run()

  • 只能用接口的实现类的对象来调用

  • 静态方法

  • 可以直接加static修饰

  • 默认会加public修饰

  • public static void run() == static void run()

  • 接口的静态方法只能用接口的类名称本身调用

  • 私有方法(JDK1.9开始才支持)

  • 其实就是私有的实例方法,必须加private修饰

1.5实现多个接口的使用注意事项


  1. 如果实现了多个接口,多个接口中存在同名的静态方法并不会冲突

原因是只能通过各自接口名访问静态方法

  1. 当一个类,既继承了一个父类,又实现了若干个接口时,父类中成员方法和接口中的默认方法重名,子类就近选择执行父类的成员方法

  2. 当一个类实现多个接口时,多个接口中存在同名的默认方法,实现类必须重写这个方法

  3. 接口中,没有构造器,不能创建对象

接口是更彻底的抽象,连构造器都没有,自然不能创建对象!

构造器:初始化一个类的对象并返回引用

1.6代码块


代码块按照有无static修饰分为:静态代码块,实例代码块

  • 静态代码块

  • 必须用static修饰,属于类,会与类一起优先加载,而且自动触发执行一次!

  • 静态代码块可以用于执行类的方法之前进行静态资源的初始化操作

  • 格式:

static{

}

  • 实例代码块

  • 必须无static修饰,属于类的每个对象,会与类的每个对象一起加载,每次创建对象的时候,实例代码块就会触发执行一次

  • 实例代码块可以用于初始化实例资源

  • 实例代码块的代码实际上是提取到每个构造器中去执行的(扩展和了解)

1.7final关键字


  1. final修饰类: 类不能被继承了

  2. final修饰方法:方法不能被重写

  3. final修饰变量:变量有且仅能被赋值一次

  • 成员变量和局部变量

  • 静态成员变量: 有static修饰,属于类,只加载一份

  • final修饰静态成员变量,变量变成了常量

  • 实例成员变量: 无static修饰,属于每个对象,与对象一起加载

  • 局部变量: 在方法中,构造器中,代码块中,for循环中的变量,用完作用范围就消失了

  • final修饰局部变量:让值被固定或者说保护起来,执行过程中防止被修改

// 1.final修饰类

final class Animal{

}

// 2.final修饰局部变量

{

final int age = 10;

}

// 3.

1.8单例(重点!!)


  1. 什么是单例?

答:单例的意思是一个类永远只存在一个对象,不能创建多个对象

  1. 为什么要用单例?

答:开发中很多类的对象我们只需要一个,对象越多占内存越多

  1. 如何实现单例?

答:单例的实现方法目前有两种方式:

  • 饿汉单例设计模式:通过类获取单例对象的时候,对象已经提前做好了

  • 懒汉单例设计模式:通过类获取单例对象的时候发现没有对象才会去创建一个对象

这里需要会手写两种单例源码!!!!!!!,在下方会有源码与步骤,面试设计模式必问!

1.9枚举类


  1. 枚举类的作用?

答:枚举用于做信息标志和信息分类

  1. 枚举类的特点

答:

  • 枚举类是final修饰的,不能被继承

  • 枚举类的第一行罗列的是枚举类的对象,而且使用常量存储的

  • 所以枚举类的第一行写的都是常量名称,默认存储了枚举对象

  • 枚举类的构造器默认是私有的

  • 枚举类相当于是多例设计对象

public class EnumDemo01 {

public static void main(String[] args) {

Sex s1 = Sex.BOY;

Sex s2 = Sex.GIRL;

}

}

enum Sex{

BOY,GIRL;

}

2.面试

======================================================================

2.1抽象类


  • 面试题:抽象类是否有构造器,抽象类是否可以创建对象?

答:1. 抽象类作为类一定有构造器,而且抽象类必须有构造器,是提供给子类创建对象调用父类构造器使用的,除此之外,类中有的成分,抽象类都具备(成员变量,成员方法,构造器,内部类,代码块)

​ 2. 抽象类虽然有构造器但是抽象类不能创建对象

  • 面试题:抽象类中的构造器可以私有吗?

答:从代码编译角度,抽象类中的构造器可以私有,但是子类继承默认调用父类构造器会报错

因为私有只能在本类中使用,所以抽象类中构造器私有没有意义。

// 反证法:假如抽象类可以创建对象!

public class AbstractDemo {

public static void main(String[] args){

// Animal a = new Animal(); // 报错

// a.run();抽象方法不能执行,因为它没有方法体,所以抽象类不能创建对象

}

}

abstract class Animal{

private String name;

//默认无参构造器

public Animal(){

}

//抽象方法

public abstract void run();

//实例方法

public void test(){

}

//静态方法

public static void Addr(){

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

  • 抽象类存在的意义

答: 1. 抽象类就是为了被子类继承(就是为了派生子类),否则抽象类毫无意义

​ 2.抽象类体现的是模板思想,部分实现,部分抽象,可以设计模板设计模式

​ 理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现

2.2代码块


  1. 静态代码块和实例代码块的作用?

答:静态代码块有static修饰,属于类,会与类一起优先加载,而且自动触发执行一次!静态代码块可以用于执行类的方法之前进行静态资源的初始化操作

实例代码块无static修饰,属于类的对象,会与类的每个对象一起加载,每次创建对象的时候,实例代码块就会触发执行一次,实例代码块可以用于初始化实例资源

2.3final,abstract关键字


  1. 请问abstractfinal的关系是什么?

答:互斥关系,不能同时出现修饰成员!

abstract 修饰类,类是抽象类,必须被继承

final 修饰类,类不能被继承

abstract 修饰方法,方法必须被重写

final 修饰方法,方法不能被重写

2.4变量


  1. 变量有几种?

答:成员变量和局部变量

  • 静态成员变量: 有static修饰,属于类,只加载一份

  • 实例成员变量: 无static修饰,属于每个对象,与对象一起加载

  • 局部变量: 只在方法中,构造器中,代码块中,for循环中,用完作用范围就消失了

  • final修饰局部变量:让值被固定或者说保护起来,执行过程中防止被修改

2.5写一个饿汉单例设计模式


饿汉单例设计模式:通过类获取单例对象的时候,对象已经提前做好了

步骤:

  1. 定义一个单例类

  2. 把类的构造器私有

  3. 定义一个静态成员变量用于存储一个对象!(饿汉单例在返回对象的时候,对象要已经做好)

  4. 定义一个方法返回单例对象

// 定义一个单例类

class SingleInstance01{

// 2.定义一个静态成员变量用于存储一个对象

public static SingleInstance01 ins = new SingleInstance01();

// 1.把类的构造器私有,构造器只能在本类中访问

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-ZiJnIpbg-1715755242697)]

[外链图片转存中…(img-hfQzTI7k-1715755242698)]

[外链图片转存中…(img-6mMqErOq-1715755242698)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值