1、不同修饰符混合使用细节
2、辨析何时定义变量为成员变量
3、类、抽象类、接口作为方法参数
4、类、抽象类、接口作为方法返回值
5、参数数量可变的方法(“变参”方法)
6、Comparable 接口 && Comparator 接口
7、lambda表达式
不同修饰符使用细节
A: 常用来修饰类、方法、变量的修饰符如下:1
2
3
4
5
6
7
8
9
10
11
12
13 public 权限修饰符,【公共访问】, "类,方法,成员变量"
—————————————————————————————————————————————————————————
protected 权限修饰符,【受保护访问】, "方法,成员变量","注意【不能】修饰类"
—————————————————————————————————————————————————————————
【默认什么也不写】 也是一种权限修饰符,【默认访问】, "类,方法,成员变量"
—————————————————————————————————————————————————————————
private 权限修饰符,【私有访问】, "方法,成员变量"
————————————————————————————————————————————————————————————————————————————————————————
static 静态修饰符 "方法,成员变量,静态内部类"
—————————————————————————————————————————————————————————
final 最终修饰符 "类,方法,成员变量,局部变量"
—————————————————————————————————————————————————————————
abstract 抽象修饰符 "类 ,方法"
B: 不能同时使用的修饰符1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28同时,abstract 与 private "不能"同时使用;(私有abstract不能继承,无意义)
同时,abstract 与 static "不能"同时使用;(abstract没有方法体,静态通过类名调用,无意义)
同时,abstract 与 final "不能"同时使用。(abstract没有方法体,final不能重写,无意义)
————————————————————————————————————————————————————————————————————————————————————————
小结:
1.抽象方法只能定义在抽象类中,抽象方法和抽象类必须由abstract修饰,abstract关键字只能描述类和方法,不能描述变量。
抽象方法只定义方法声明,不定义方法实现。抽象类不可以被实例化(创建对象),
只有通过子类继承抽象类并覆盖抽象类中的所有抽象方法后,该子类才可以被实例化,否则该子类还是一个抽象类。
抽象类中有构造函数用于给子类对象进行初始化,同时"抽象类中【可以】含有非抽象方法"。
—————————————————————————————————————————————————————————
abstract关键字"不可以"与final,private,static关键字共存,因为被final修饰的方法不可以被重写,
意味着子类不可以重写该方法,如果abstract和final共同修饰父类中的方法,子类要实现抽象方法(abstract的作用),
而final又不让该方法重写,这相互矛盾。如果private和abstract共同修饰父类中的方法,private修饰则该方法不可以被子类访问,
但是abstract修饰需要子类去实现,两者产生矛盾。如果static和abstract共同修饰父类中的方法,
static表示是"静态的方法,随着类的加载而加载,则该方法不需要在子类中去实现",这与abstract关键字矛盾。
————————————————————————————————————————————————————————————————————————————————————————
2.static用于修饰成员变量和成员函数,想要"实现对象中的【共性数据】的【对象共享】",可以将这个数据进行静态修饰,
"被静态修饰的成员可以直接被类名调用,静态随着类的加载而加载,而且优先于对象存在"。
"静态方法只能访问静态成员(静态方法和静态变量),不可以【直接】用【成员名】访问非静态成员,需要new(创建对象)访问。
这是因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员"。
静态方法中"不能"使用this和super关键字,
因为this代表本类对象,super代表父类对象,而静态时,有可能没有对象存在,所以this和super无法使用。
————————————————————————————————————————————————————————————————————————————————————————
3.final关键字可以修饰类,方法,变量(成员变量内,局部变量,静态变量),
被final修饰的类是一个最终类,不可以被继承,
被final修饰的方法是一个最终方法,不可以被覆盖,但是可以被继承。
被final修饰的变量只能是一个常量,只能赋值一次。内部类被定义在类中的局部位置上时,只能访问局部被final修饰的局部变量。
C: 修饰类能够使用的修饰符:1
2
3
4
5
6
7
8
9修饰类【只能】使用public、默认的、final、abstract关键字
静态内部类:static
使用最多的是 public关键字
a:代码案例
public class Demo {} //最常用的方式
class Demo2{}
public final class Demo3{}
public abstract class Demo4{}
D:修饰成员变量能够使用的修饰符:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public : 公共的
protected : 受保护的
: 默认的
private :私有的
"【权限修饰符都可以】"
————————————————————————————————————————————————————————————————————————————————————————
final : 最终的
static : 静态的
使用最多的是 private
修饰【成员变量】,【除了】 abstract 都可以
————————————————————————————————————————————————————————————————————————————————————————
a: 代码案例
public int count = 100;
protected int count2 = 100;
int count3 = 100;
private int count4 = 100; //最常用的方式
public final int count5 = 100;
public static int count6 = 100;
E:修饰构造方法能够使用的修饰符:
1 | public : 公共的 |
F:修饰成员方法能够使用的修饰符:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public : 公共的
protected : 受保护的
: 默认的
private :私有的
"【权限修饰符都可以】"
————————————————————————————————————————————————————————————————————————————————————————
final : 最终的
static : 静态的
abstract : 抽象的
————————————————————————————————————————————————————————————————————————————————————————
使用最多的是 public
a:代码案例
public void method1(){}//最常用的方式
protected void method2(){}
void method3(){}
private void method4(){}
public final void method5(){}
public static void method6(){}//最常用的方式
public abstract void method7();//最常用的方式
局部变量和成员变量解析
1 | 定义长方形类,包含求周长与求面积的方法 |
类作为方法的参数与返回值
* A: 类作为方法参数
1 | 在编写程序中,会经常碰到调用的方法要接收的是一个类类型的情况,那么这时,要向方法中传入该类的对象。 |
抽象类作为方法参数与返回值
* A: 抽象类作为方法参数
1 | 今后开发中,【抽象类】作为【方法参数】的情况也很多见。 |
接口作为方法参数与返回值
* A: 接口作为方法参数
1 | 【接口】作为【方法参数】的情况是很常见的,经常会碰到。 |
星级酒店案例
* A: 根据“某五星级酒店,资金雄厚……都有自己的工作要做。”分析出,该题
目中包含酒店,可以把它封装成类,多名员工)。
1 | class 员工 { |
B:
VIP服务
public interface VIP {
public abstract void server(); //服务
}
员工
1 | /* |
服务员
1 | /* |
经理
1 | /* |
厨师
1 | /* |
参数数量可变的方法(“变参”方法)
1 | 现在的版本提供了可以用可变的参数数量调用的方法(有时称为“ 变参” 方法。) |
Comparable 接口 && Comparator 接口
1 |
|