static、接口、多态、内部类

本文详细介绍了Java编程中的核心特性,包括静态成员、静态代码块、接口、多态和内部类。静态成员用于全局共享,接口允许类实现多态,多态则提升了代码的扩展性和维护性。此外,还探讨了内部类的概念及其创建方式,以及匿名内部类在临时实现接口或抽象类时的应用。
摘要由CSDN通过智能技术生成
静态
     我们希望类中的某些成员是被全局共享的,在内存中也只存储一份,这样有利于我们后期的代码维护。
     静态使用 static 进行修饰,静态成员是属于类/接口的,可以在没有对象的情况下,直接使用类名调用。
     可以使用对象去访问静态成员,但不推荐!!!
     静态代码块
         使用 static 修饰的构造代码块就是静态代码块,它的特点是在类加载的时候执行,由于类只加载一次
         所有静态代码块也只会执行一次。
接口
     接口也是 Java 中的一种数据类型,和类一样,也会被编译成字节码文件。
     接口使用 interface 关键字定义,接口中可以定义的成员有
         - 静态常量
         - 抽象方法
         - 默认方法(1.8)
         - 静态方法(1.8)
     定义格式
         public interface MyInterface {
             // 静态常量
             public static final int MIN_VALUE = 1;
             int MAX_VALUE = 99;
             // 抽象方法
             public abstract void method1();
             void method2();
             // 默认方法(1.8)
             public default void method3() {
                 //方法体
             }
             default void method4() {
                 //方法体
             }
             // 静态方法(1.8)
             public static void method5() {
                 //方法体
             }
             static void method6() {
                 //方法体
             }
         }
     接口实现
         类和类之间是继承关系,类和接口之间是实现关系(类似继承),支持多实现,使用 implements 关键字。
         实现的语法格式:
             public interface MyInterface {
             }
             public class MyInterfaceImpl implements MyInterface {
             }
         多实现的语法格式
             public class 实现类 extends 父类 implements 接口A, 接口B... {
             }
         多实现后的注意事项
             如果多个父接口中有重名的抽象方法,实现类【仅需】重写一次。
             如果多个父接口中有重名的默认方法,实现类【必须】重写一次。
             如果父类中的成员方法和接口中的默认方法重名,优先执行父类的。
     接口继承
         接口和接口之间是继承关系,使用 extends 关键字,并且支持多继承。
         语法格式
             public interface 子接口 extends 父接口A, 父接口B... {
             }
         多继承后的注意实现
             多个父接口中的默认方法重名,子接口必须要重写一次。
多态
     什么是多态?
         在面向对象的编程语言中,多态指的是同一个方法,在不同的对象上,有不同的实现。在执行的时候也会有不同的表现。
     多态的前提?
         1. 继承或实现关系(二选一)
         2. 方法重写(不重写,无意义)
         3. 父类引用指向子类对象(多态的语法格式)
     多态的格式
         父类类型 对象名 = new 子类类型();
         举例:
             Animal a = new Dog();
     多态时访问成员的特点
         成员变量:访问的是父类的
         成员方法:访问的是子类的
         静态方法:访问的是父类的
         总结:多态时,成员方法访问的是子类的,其他都是父类的。
     多态的表现形式
         - 普通父类多态
         - 抽象父类多态
         - 接口多态
     多态的应用场景
         - 变量多态
         - 参数多态
         - 返回值多态
     多态的好处
         - 多态能够提升我们程序的可扩展性和可维护性。
     多态的弊端
         - 无法调用子类中特有的方法。
引用类型的转换
     向上转型:多态的语法格式就是向上转型
     向下转型:将一个父类类型的对象,转换成一个子类类型的对象,需要使用强制类型转换的语法。
     Animal a = new Cat();
     a.eat();
     a.sleep();
     //a.catchMouse(); //错误,无法访问子类中特有的成员
     //向下转型
     if (a instanceof Cat) {
         Cat c = (Cat)a;
         c.catchMouse();
     }
     在向下转型的过程中,可能会有类型转换错误的风险,Java 给我们提供了一个 instanceof 关键字,用于
     判断一个对象是否属于某个类型。
内部类
     一个类中又定义了一个类,里面的类就是内部类。
     语法格式
         public class Car { //外部类
             public class Engine { //内部类
             }
         }
     创建内部类对象
         在外部类中创建:
             和普通的类的对象创建格式是一样的,没有区别,内部类名 对象名 = new 内部类名();
         在其他类中创建:
             外部类.内部类 对象名 = new 外部类().new 内部类();
     匿名内部类
         如果要【临时】使用一个接口/抽象类,可以使用匿名内部类对象的方式,临时的创建一个实现类/子类对象。
         语法格式
             public abstract class Animal {
                 public abstract void eat();
             }
             Animal a = new Animal() {
                 public void eat() {
                     //方法体;
                 }
             };
             a.eat();
         应用场景
             - 将匿名内部类对象赋值给一个变量
             - 将匿名内部类对象作为方法的参数进行传递
             - 将匿名内部类对象做法方法的返回值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YYDS97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值