内部类
内部类
成员内部类
// Computer类和Part成员内部类
public class Computer {
private String name = "计算机";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private void call(){
System.out.println("我叫计算机不是计算器");
}
int fn(int a){
this.call();
System.out.println("我是普通方法");
return 6;
}
protected void f(){
System.out.println("我是父类受保护的方法");
}
class Part{
String ram = "64G";
String disk = "固态硬盘";
void fn(){
System.out.println(name); // 直接访问父类的私有属性
call(); // 直接访问父类的私有方法
}
}
}
// 主类
public class MyClass {
public static void main(String[] args) {
Computer computer = new Computer();
Computer.Part part = computer.new Part(); // 通过外部类去new内部类
part.fn();
}
}
静态内部类 // 内部类用static修饰,static修饰类也只能修饰内部类和private一样
public class Computer {
private static String brand = "品牌";
private String name = "计算机";
private void call(){
System.out.println("我叫计算机不是计算器");
}
static class Device{
String screen = "AOC";
void fun(){
System.out.println(brand); // 静态的类只能访问外部类的静态方法和静态属性
call(); // 这是不行的static加载比这方法快
}
}
}
// 使用静态类部类
Computer.Device device = new Computer.Device();
// 问题? 为什么不能通过外部类实例去new静态类部类
// 回答! 静态修饰跟着类走不能通过实例访问(static的基础知识)
局部内部类
只能在方法内部访问
public class Computer {
int fn(int a){
// 在一个方法中去定义一个类,这个类不能加修饰符,此时也不是default,default本来也不能修饰类
class DiffrentName{
String brand1 = "小米";
String brand2= "苹果";
}
// 只能方法内使用
new DiffrentName();
return 6;
}
}
匿名内部类
// 匿名内部类实现接口
new animalAction(){
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public void eat() {
}
@Override
public void drink() {
}
@Override
public void la() {
}
@Override
public void sa() {
}
};
public interface animalAction {
// 属性都是public static final
int a = 1;
// 没有构造函数不能被new
// 方法都是public abstract 可省略
void eat();
void drink();
void la();
void sa();
}
你的努力有资格到拼天赋的程度吗?