java笔记篇:包、final关键字、常量、抽象类、接口、内部类,都是一些零碎的知识,所以写一篇记录一下,偶尔翻出来看看。

包 final 常量

权限修饰符&&代码块

关于静态代码块实现数据的初始化,我在前面写的学生信息管理系统中添加一个不需要注册的管理员信息来实现;改写前App.java代码

改写后App.java代码:

那么我们运行尝试一下初始化添加的管理员信息是否有效

抽象类和抽象方法

抽象类和抽象方法的定义方法

public abstract class Animal {
    public abstract void eat();
}

//代码我就直接写在一个文件里面了,看起来方便一点
public class App {
    public static void main(String[] args) {
        Dog d = new Dog("大黄",3);
        d.eat();
        d.drink();

        Sheep s = new Sheep("小黄",2);
        s.eat();
        s.drink();
    }
}
abstract class Animal {
    String name;
    int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
    public void drink(){
        System.out.println("喝水");
    }
}

class Dog extends Animal {

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃骨头");
    }
}
class Frog extends Animal{


    public Frog() {
    }

    public Frog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃虫子");
    }
}
class Sheep extends Animal{

    public Sheep() {
    }

    public Sheep(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃草");
    }
}

接口

接口的练习

这里我直接用上面的代码修改了一下,意思是一样的

public class App {
    public static void main(String[] args) {
        Dog d = new Dog("大黄",3);
        d.eat();
        d.swim();//输出狗刨

        Frog f = new Frog("小青蛙",1);
        f.eat();
        f.swim();//输出蛙泳

        Sheep s = new Sheep("小黄",2);
        s.eat();
        s.swim(); //这里因为sheep类没有调用swim接口,所以报错
    }
}
abstract class Animal {
    String name;
    int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
}

class Dog extends Animal implements swim {

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃骨头");
    }

    @Override
    public void swim() {
        System.out.println("狗刨");
    }
}

class Frog extends Animal implements swim{


    public Frog() {
    }

    public Frog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃虫子");
    }

    @Override
    public void swim() {
        System.out.println("蛙泳");
    }
}

class Sheep extends Animal{

    public Sheep() {
    }

    public Sheep(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃草");
    }
}

//游泳的接口
interface swim{
    public abstract void swim();
}

接口的特点

通过Java内存分析工具可以清晰看到

接口和类的关系

接口新增的方法

0x01版本新增历史

0x02默认方法

0x02静态方法

0x03私有方法

接口的应用

适配器设计模式

综合练习

这道题重要的是继承的路线,如果你规划的好,会省去很多麻烦

代码就不写了,思路如下

成员内部类

成员内部类代码如何书写

如何创建成员内部类对象

成员内部类如何获取外部类的成员变量

静态内部类

字面意思,用static修饰的内部类

局部内部类

定义在方法里的类就叫做局部内部类,局部内部类用处不到,了解一下即可

匿名内部类