笔上得来终觉浅,绝知此事要躬行
🔥 个人主页:星云爱编程
🔥 所属专栏:javase
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
一、抽象类
1.1基本介绍
(1)用abstract关键字来修饰一个类时,这个类就叫做抽象类。
语法:
访问修饰符 abstract 类名{}
(2)用abstract关键字来修饰一个方法时,这个方法就是抽象方法。
语法:
访问修饰符 abstract 返回类型 方法名(参数列表);
注:抽象方法无方法体,即连{}都不能有。
(3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类。
1.2使用细节
(1)抽象类不能被实例化。
(2)抽象类不一定要包含abstract方法,即抽象类可以没有abstract方法。
(3)一旦类包含了abstract方法,则这个类必须声明为abstract类。
(4)abstract只能修饰类和方法,不能修饰属性和其他的。
(5)抽象类可以有任意成员;比如:非抽象方法、构造器等。
(6)抽象方法不能有主体,即不能实现。
(7)如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。
(8)抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背的。
二、接口
2.1基本介绍
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来
语法:
interface 接口名{
//属性
//方法
}
class 类名 implements 接口{
//自己属性
//自己方法
//必须实现的接口的
}
注:
(1)在jdk7以前,接口里的所有方法都没有方法体,即都是抽象方法。
(2)在jdk8后接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现。
2.2注意事项及细节
(1)接口不能实例化。
(2)接口中所有的方法都是public方法,接口中抽象方法,可以不用abstract修饰。
(3)一个普通类实现接口,就必须将该接口的所有方法都实现。
(4)抽象类实现接口,可以不用实现接口的方法。
(5)一个类可以同时实现多个接口。
(6)接口中的属性,只能是final的,而且是public static final修饰符。
(7)接口中的属性的访问形式:接口名.属性名。
(8)接口不能继承其他的类,但是可以实现多个接口。
(9)接口的修饰符只能是public和默认。
2.3实现接口VS继承类
(1)解决的问题不同
继承的价值在于:解决代码的复用性和可维护性。
接口的价值在于:设计;设计好各种规范(方法),让其他类去实现这种方法,即更加的灵活。
(2)接口比继承更加灵活,继承是满足is-a的关系,而接口只需要满足like-a的关系。
(3)接口在一定程度上实现代码解耦(即:接口规范性+动态绑定机制)
2.4接口的多态特性
(1)多态参数;
(2)多台数组;
(3)接口存在多态传递现象。
三、内部类
3.1基本介绍
一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类,嵌套其他类的类称为外部类。内部类是类的第五大成员(类的五大成员:属性、方法、构造器、代码块、内部类)。内部类最大的特点是可以直接访问私有属性,并且可以体现类与类之间的包含关系。
3.2基本语法
class Outer{//外部类
class Inner{//内部类
}
}
class Other{]//外部其他类
3.3内部类的分类
(1)定义在外部类局部位置上(比如方法类):
①局部内部类(有类名)
②匿名内部类(无类名)
(2)定义在外部类的成员位置上:
③成员内部类(无static修饰)
④静态内部类(使用static修饰)
3.4局部内部类的使用
说明:局部内部类是定义在外部类的局部位置。
(1)可以直接访问外部类的所有成员,包含私有的。
(2)不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能使用访问修饰的;但是可以使用final修饰,因为局部变量也可以使用final.
(3)作用域:仅仅在定义它的方法或代码块中
(4)局部内部类访问外部类的成员
访问方式:直接访问。
(5)外部类访问内部类局部内部类的成员
访问方式:创建对象,再访问(必须在作用域内)。
(6)外部其他类不能访问局部内部类。因为局部内部类地位是个局部变量。
(7)如果外部类和局部内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.this.成员去访问
3.5匿名内部类
说明:局部内部类是定义在外部类的局部位置。比如方法中
基本语法:
new 类或接口(参数列表){
类体
};
(1)匿名内部类的语法比较独特,因为匿名内部类即是一个类的定义,同时它本身也是个对象,因此从语法上看,它既有定义类的特征,又有创建对象的特征。
(2)可以直接访问外部类的所有成员,包含私有的。
(3)不能添加访问修饰符,因为它的地位是局部变量。
(4)作用域:只在定义它的方法或代码块中。
(5)匿名内部类访问外部类成员
访问方式:直接访问。
(6)外部其他类不能访问匿名内部类。(因为其地位是局部变量)
(7)如果外部类和匿名内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.this.成员去访问。
3.6成员内部类
说明:成员内部类是定义在外部类的成员位置,并且没有static修饰
(1)可以直接访问外部类的所有成员,包含私有的。
(2)可以添加任意访问修饰符,因为其地位就是一个成员。
(3)作用域:和外部类的其他成员一样,为整个类体。
(4)成员内部类访问外部类外部类:直接访问。
(5)外部类访问成员内部类:创建对象,再访问。
(6)外部其他类访问成员内部类:创建对象,再访问。
(7)如果外部类和成员内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.this.成员去访问。
3.7静态内部类
说明:静态内部类是定义在外部类的成员位置,并且有static修饰。
(1)可以直接访问外部类的所有静态成员。包含私有的,但不能直接访问非静态成员。
(2)可以添加任意访问修饰符,因为其地位就是一个成员。
(3)作用域:同其他的成员,为整个类体。
(4)静态内部类访问外部类静态属性:直接访问所有静态成员。
(5)外部类访问静态内部类:创建对象,再访问。
(6)外部其他类访问静态内部类:创建对象,再访问。
(7)如果外部类和静态内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.成员去访问。
结语
感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!
路漫漫其修远兮,吾将上下而求索。