Java基础: 抽象类、接口、final关键字、static关键字

抽象类

//父类 动物类
public abstract class Animal {
    //成员变量:值可以改变
    String name = "小黄";
    //成员常量:值不能改变
    final int age = 10;

    public abstract void eat();
}
//子类 Dog类
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("吃骨头");
    }
}
//子类 Pig类
public class Pig extends Animal {
    @Override
    public void eat() {
        System.out.println("吃面条");
    }
}
// 调用类
public class Test {
    public static void main(String[] args) {
        Animal d = new Dog();
        Animal p = new Pig();
        d.eat();
        p.eat();
    }
}

一、抽象类的概念

    包含抽象方法的类。用abstract修饰

二、抽象方法的概念

只有方法声明,没有方法体的方法。用abstract修饰抽

三、象方法的由来

当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类

四、抽象类的特点

1. 修饰符:必须用abstract关键字修饰
        修饰符 abstract class 类名 {}
        public abstract class Animal {}
        修饰符 abstract 返回类型方法名 {}
        public abstract String getName {}
2. 抽象类不能被实例化,只能创建子类对象
3. 抽象类子类的两个选择
    重写父类所有抽象方法
    定义成抽象类抽象类

五、成员的特点

成员变量:可以有普通的成员变量也可以有成员常量(final)
成员方法:可以有普通方法,也可以有抽象方法抽象类不一定有抽象方法,有抽象方法的类一定是抽象类(或接口)
构造方法:像普通类一样有构造方法,且可以重载

接口

接口的概念

接口技术用于描述类具有什么功能,但并不给出具体实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则、标准

接口的定义

定义接口使用关键字interface
interface 接口名 {}
类和接口是实现关系,用implements表示
class类名implements接口名

接口创建对象的特点

1. 接口不能实例化通过多态的方式实例化子类对象
2. 接口的子类(实现类)可以是抽象类,也可以是普通类

接口继承关系的特点
1. 接口与接口之间的关系
继承关系,可以多继承,格式

    接口extends接口1,接口2,接口3...

2. 继承和实现的区别
    继承体现的是“is a”的关系,父类中定义共性内容
    实现体现的是“like a”的关系,接口中定义扩展功能

接口成员的特点
接口成员变量的特点

    接口没有成员变量,只有公有的、静态的常量:public static final 常量名 = 常量值

接口成员方法的特点

    JDK7及以前,公有的、抽象方法:
        public abstract 返回值类型 方法名();
    JDK8以后,可以有默认方法和静态方法:
        public default 返回值类型 方法名() {}
        static 返回值类型 方法名() {}
    JDK9以后,可以有私有方法:
        private 返回值类型 方法名() {}

接口构造方法的特点

接口不能够实例化,也没有需要初始化的成员,所以接口没有构造方法

final关键字

final的作用:

用于修饰类、方法和变量
修饰类:该类不能被继承,但是可以继承其他的类
修饰方法:该方法不能被重写不能与abstract共存,不能被重写
修饰变量:是一个常量,值只能设置一次

static关键字

static的作用

用于修饰类的成员:成员变量:类变量成员方法:类方法

调用方式

类名. 成员变量名; 类名. 成员方法名(参数);

static修饰成员变量特点:被本类所有对象共享

注意事项

    随意修改静态变量的值是有风险的,为了降低风险,可以同时用final关键字修饰,即公有静态常量(注意命名的变化)
    public final static String DEPART_NAME = "研发部";

static修饰成员方法

静态方法:静态方法中没有对象this,所以不能访问非静态成员

静态方法的使用场景只需要访问静态成员不需要访问对象状态,所需参数都由参数列表显示提供
原文地址:https://www.cnblogs.com/lin127/p/12612520.html