C C++最全Java抽象类接口内部类(详细知识点)_抽象类中的内部接口,2024年最新面试总结

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

接口中除了抽象方法外,还可以有默认方法和静态方法(也叫类方法),默认方法使用default修饰,静态方法使用static修改,并且这两种方法都允许有方法体。

2.3🍬接口的实现

[修饰符] interface 接口名 [extends 父接口1,父接口2,…] {

​ [public] [static] [final] 常量类型 常量名 = 常量值;

​ [public] [abstract] 方法返回值类型 方法名([参数列表]);

​ [public] default 方法返回值类型 方法名([参数列表]){

​ // 默认方法的方法体

​ }

​ [public] static 方法返回值类型 方法名([参数列表]){

​ // 类方法的方法体

​ }

}

package oop.demo13;
//interface 接口定义的关键字,接口都需要有实现类
public interface UserService {
    //接口中的所有属性都是常量public static final
    //不建议使用
    int AGE = 10;

    //接口中的所有定义方法其实都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);

}
package oop.demo13;

public interface TimeService {
    void time();
}
package oop.demo13;
//implements 类实现接口
//利用接口实现伪多继承
//实现了接口的类,就需要实现接口中的方法
public class UserServiceImpl implements UserService,TimeService{

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void time() {

    }
}


修饰符可以使用public或直接省略(省略时默认采用包权限访问控制符)。

在接口内部可以定义多个常量和抽象方法,定义常量时必须进行初始化赋值,定义默认方法和静态方法时,可以有方法体。

在接口中定义常量时,可以省略“public static final”修饰符,接口会默认为常量添加“public static final”修饰符。

与此类似,在接口中定义抽象方法时,也可以省略“public abstract”修饰符,定义default默认方法和static静态方法时,可以省略“public”修饰符,这些修饰符系统都会默认进行添加。

2.4🥧接口中的类

接口中可以包含三类方法:抽象方法、默认方法、静态方法。

静态方法可以通过“接口名.方法名”的形式来调用。

抽象方法和默认方法只能通过接口实现类的实例对象来调用。

接口的实现类,必须实现接口中的所有抽象方法。

[修饰符] class 类名 [extends 父类名] [implements 接口1,接口2,…] {

​ …

}

package oop.demo13;
//implements 类实现接口
//利用接口实现伪多继承
//实现了接口的类,就需要实现接口中的方法
public class UserServiceImpl implements UserService,TimeService{

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void time() {

    }
}

2.5🍡接口的注意点

从JDK 8开始,接口中的方法除了包含抽象方法外,还包含默认方法和静态方法,默认方法和静态方法都可以有方法体,并且静态方法可以直接通过“接口.方法名”来调用。

当一个类实现接口时,如果这个类是抽象类,只需实现接口中的部分抽象方法即可,否则需要实现接口中的所有抽象方法。

一个类可以通过implements关键字同时实现多个接口,被实现的多个接口之间要用英文逗号(,)隔开。

接口之间可以通过extends关键字实现继承,并且一个接口可以同时继承多个接口,接口之间用英文逗号(,)隔开。

一个类在继承一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。

三.🫕内部类

3.1🍪什么是内部类?

在Java中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类。

3.2🎂成员内部类

在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。说明:在成员内部类中,可以访问外部类的所有成员,包括成员变量和成员方法;在外部类中,同样可以访问成员内部类的变量和方法。

package oop.demo14;

public class Outer {

    private int id = 10;
    public void out(){
        System.out.println("这是外部类方法");

    }
    //定义内部类
    class Inner{
        public void in(){
            System.out.println("这是内部类方法");
        }
        //成员的访问
        public void getId(){
            System.out.println(id);
        }
    }
    
}
package oop.demo14;

public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();
        //实例化
        Outer.Inner inner =outer.new Inner();
        inner.in();
    }
}

3.3🍰静态内部类

所谓静态内部类,就是使用static关键字修饰的成员内部类。

静态内部类在成员内部类前增加了static关键字,在功能上,静态内部类中只能访问外部类的静态成员,同时通过外部类访问静态内部类成员时,可以跳过外部类从而直接通过内部类访问静态内部类成员。

package oop.demo14;

public class Outer2 {
    private static int id = 10;
    public void out(){
        System.out.println("这是外部类方法");

    }
    static class Inner2{
        public  void in(){
            System.out.println("这是内部类方法");
        }
        public void getId(){
            System.out.println(id);
        }
    }
}
package oop.demo14;

public class Application {

    public static void main(String[] args) {
        Outer2.Inner2 inner2 =new Outer2.Inner2();
    }

}

3.4🍧局部内部类

局部内部类,也叫做方法内部类,就是定义在某个局部范围中的类,它和局部变量一样,都是在方法中定义的,其有效范围只限于方法内部。

在局部内部类中,局部内部类可以访问外部类的所有成员变量和方法,而局部内部类中的变量和方法却只能在创建该局部内部类的方法中进行访问。

package oop.demo14;

public class Outer3 {
    public void method(){
        //局部变量类
        class Inner3{
            public void in(){
                
            }
        }
    }
}

3.5🥣匿名内部类

匿名内部类其实就是没有名称的内部类。

在调用包含有接口类型参数的方法时,通常为了简化代码,可以直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现。

从JDK 8开始,允许在局部内部类、匿名内部类中访问非final修饰的局部变量,而在JDK 8之前,局部变量前必须加final修饰符,否则程序编译报错。

package oop.demo14;

public abstract class Transport {
    public abstract void run();

}
package oop.demo14;

public class Outer4 {
    public static void main(String[] args) {
        //匿名内部类
        Transport transport = new Transport() {
            @Override
            public void run() {
                System.out.println("小火车在跑");
            }
        };
    }
}

四.🥮static关键字

4.1🥖静态属性

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

};
}
}


### 四.🥮static关键字


##### 4.1🥖静态属性





[外链图片转存中...(img-lPyJfCzw-1715693619809)]
[外链图片转存中...(img-sNGi0BM8-1715693619809)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值