JAVA学习day10 JavaSE基础——权限修饰符、内部类、匿名内部类
1. 类名、接口名作为方法参数和返回值类型
● 类名和抽象类名作为方法参数类型和返回值类型
● 接口名作为方法参数类型和返回值类型
代码演示:
public class Test {
public static void main(String[] args) {
Student student= new Student("欧成", 22);
getStu(student);
getFit(new Run());
Fitness fitness = jP();
fitness.exercise();
}
//抽象类名作为参数类型
public static void getStu(Person person){
System.out.println(person.name+" "+person.age);
}
//抽象类名作为返回值类型
public static Person showPerson(){
Person p = new Person("小明", 21) {
@Override
public void show() {
}
};
return p;
}
//接口作为参数类型
public static void getFit(Fitness fitness){
fitness.exercise();
}
//接口作为返回值类型
public static Fitness jP(){
Run run = new Run();
return run;
}
}
abstract class Person{
String name;
int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public abstract void show();
}
class Student extends Person{
public Student(String name, int age) {
super(name, age);
}
@Override
public void show() {
System.out.println(name+" "+age);
}
}
interface Fitness{
public abstract void exercise();
}
class Run implements Fitness{
@Override
public void exercise() {
System.out.println("run");
}
}
2. 权限修饰符
本类 | 同一个包下(子类、无关类) | 不同包下(子类) | 不同包下(无关类) | |
---|---|---|---|---|
private | Y | N | N | N |
默认 | Y | Y | N | N |
protected | Y | Y | Y | N |
public | Y | Y | Y | Y |
Y表示可访问,N表示不能访问。
3.内部类
a. 内部类就是把类定义在别的类里面,这个类就是内部类。
b. 内部类的访问特点:内部类可以访问外部类的所有成员,包括私有的;外部类要访问内部类的成员就要创建对象。
c. 内部类的分类:定义在类中的称为成员内部类;定义在类中方法内的称为局部内部类。
d. 在别的类访问内部类格式:外部类名.内部类名 对象名 = new 外部类名().new内部类名();
代码演示:
package com.westos.demo2;
class Outer {
int num = 30;
public void show(){
System.out.println(num);
}
class Inner{
int num = 20;
public void show(){
int num = 10;
System.out.println(num);
System.out.println(Inner.this.num);
Outer.this.show();
}
}
}
class Test{
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
Outer outer = new Outer();
outer.show();
}
}
执行结果:
4. 匿名内部类
● 匿名内部类就是简化的局部内部类。
● 前提:存在一个接口或类(具体类抽象类都可以)。
● 格式:new 接口名或类名(){ 重写方法 };
● 匿名内部类的本质就是接口或类的子类匿名对象。
匿名内部类的应用:
package com.westos.demo3;
public interface Lakers {
public abstract void play();
}
class Person{
public void method(){
Lakers lakers = new Lakers() {
@Override
public void play() {
System.out.println("打篮球");
}
};
lakers.play();
}
}
class Test{
public static void main(String[] args) {
Person person = new Person();
person.method();
}
}