一、抽象类
抽象方法:没有方法体的方法就叫抽象方法
抽象类:一个类中只要包含了抽象方法,那么这个类必须是一个抽象类,但是抽象类中可以不包含有抽象方法,而且抽象类中也可以包含有普通方法
注意:
1.抽象类被子类继承的时候,必须重写其下所有抽象方法,否则程序会报错,或者将子类也变成抽象类
2.:抽象类中可以包含有抽象、普通两种类型的方法,而普通类中必须只能包含有普通方法
3.抽象类由abstract关键字进行修饰,抽象方法也是
public abstract class Animal {
//抽象方法没有方法体 要加abstract进行修饰
public abstract void eat();
//普通方法
public void jiao(){
System.out.println("动物叫")
}
}
抽象类的应用场景:在父类中某些方法要求子类必须对其进行重写,此时,父类的某些方法可以声明为抽象方法,那么父类就可以变成了抽象类
抽象类的特性:
(1).抽象类对象并不能通过自己来创建,但是产生的同时会自动创建一个父类抽象类对象
(2).可以有属性
(3).可以包含有抽象和普通的方法
(4).因为有自动创建的对象所以能创建构造方法
(5).依旧是单继承
二、final,static修饰词
(1).final修饰词:
作用:
a.使全局变量或局部变量,变成为常量
注意:修饰属性全局变量:必须在初始定义时就赋值,否则会报错
值只能赋值一次,一旦赋值以后就无法发生变更
final int x = 10;
x = 20;//错误的写法 只能赋值一次
final int a;
a = 20;//正确的写法 初始时并未赋值
System.out.println(a);
b.表示方法不能被重写
public class A {
public final void test(){//父类final方法
}
}
public class B extends A{
public void test(){//此方法无法被重写
}
}
c.表示类不能被继承
public final class A {
}
//修饰符final修饰的A类无法被继承,这里会报错
public class B extends A{
}
(2).static修饰词:
static可以修饰属性吗,方法,类(内部类)
static修饰结果 : 将属性或方法从对象级别变成类级别元素
public class Test {
public static int age;
//普通方法 对象级别的
public static void myStatic(){
}
public static void main(String[] args) {
Test.age = 10;//类名.属性名
Test.age = 30;
Test.age = 50;
Test.myStatic();//类名.方法名
}
}
类级别元素:
(1):类一级别的元素的特点是:所有对象共享,对象级别的元素是每个对象独享的
(2):生命周期问题 : 对象如果一直存在,不被回收,堆积过多容易导致堆内存溢出错误永远不会自动结束生命周期-导致静态变量常驻内存,不适合定义占用空间过大的元素
静态的使用场景:
(1).需要进行共享的属性元素
(2).静态方法-都是为了操作静态属性使用-用着方便
(3).综合考虑内存占用问题
三、接口:
接口:全都是抽象方法的方法,比抽象类还抽象的方法
使用方式:把类名前面的class变成interface
public interface Animal {
public void eat();//不需要写abstract修饰词
void jiao();// 可以省略public
}
接口的使用场景:父类中全部方法要求子类必须对其进行重写,此时,父类的全部变为抽象方法,父类就可以声明为接口
接口的特性:
(1).不能手动创建对象,也不会自动创建对象
(2).添加的都是静态的常量
(3).方法全是全是抽象方法
(4).没有构造方法
(5).多重继承(学名多重实现)接口和接口之间也可以存在继承关系是多继承
public class C implements A,B{//多重继承
@Override
public void a() {
}
@Override
public void b() {
}
}
接口和抽象类区别:
接口 | 抽象类 | |
属性 | 静态的常量 | 任意 |
方法 | 只能是抽象方法 | 可抽象,普通 |
构造方法 | 没有 | 有 |
类的继承关系 | 多重实现或多重继承 | 单继承 |
声明的关键字 | interface | abstract |
本人会定期发表关于Java的相关知识,如果有错误请指出,觉得好请点赞,收藏加关注,谢谢!!