抽象类
为什么使用抽象类?
1、如果让子类必须去重写父类方法
关键字:abstract
创建时选择abstract
抽象类方法:只有方法声明,没有方法实现的方法(此方法 没有 方法体)
//抽象方法
public abstract void test1();
//普通方法
private void test2() {
System.out.println("我是普通方法 test2");
}
重要特点:抽象类中可以声明抽象方法,也可以声明普通方法,但是普通类中不能声明抽象方法。
如何调用抽象方法:
前提:如何去向抽象方法加入方法体---------方法的实现
1、父类中的抽象方法,需要子类去重写
2、抽象类无法象普通类那样进行实例化
3、抽象类可以继承抽象类,可以重写父类抽象方法,也可以不重写
注意:如果子类的父类是抽象类,子类必须要重写父类的抽象方法。抽象方法有一定的强制性
//父类
public abstract class Test03 {
//抽象方法
public abstract void test1();
//普通方法
private void test2() {
System.out.println("我是普通方法 test2");
}
}
//子类
class Demo1_son extends Test03{
//重写 父类 抽象方法 Test03
@Override
public void test1() {
// TODO Auto-generated method stub
System.out.println("本是父类的抽象的方法,重写完变成普通方法");
}
}
调用子类实例化
//父类
public abstract class Test03 {
//抽象方法
public abstract void test1();
//普通方法
private void test2() {
System.out.println("我是普通方法 test2");
}
//调用子类实例化
public static void main(String[] args) {
Demo1_son son=new Demo1_son();
son.test1();
}
}
//子类
class Demo1_son extends Test03{
//重写 父类 抽象方法 Test03
@Override
public void test1() {
// TODO Auto-generated method stub
System.out.println("本是父类的抽象的方法,重写完变成普通方法");
}
}
抽象类规则
1、抽象类不能被实例化
2、
口诀:
此类有抽象,必是抽象类;
子类没实现父类抽象,子类必是抽象类
final类
关键字:
final可以修饰的:
1、final修饰 类 时—————此类不能被继承
2、final修饰 变量 —————不能被重新赋值,只能赋值一次;
要么在声明时赋值,或者构造器中赋值;
fianl修饰变量,此变量没有初始值;
3、final 修饰 方法 不能被覆盖,不能被修改
final方法不能被重写,但是可以被重载
接口(interface)
关于继承:子类只能有一个父类
需求:如何让类实现多继承?
用到了接口
接口的概念
1、接口中只包含常量和抽象方法,而没有变量和方法的实现(只能是抽象方法)
2、接口对类来说是一套规范,是一套协议;
因为接口中有抽象方法,所以它对类有一定的约束性:必须要实现接口中的方法
3、接口不是类,不能实例化,同时没有构造器。
接口与类之间不是继承关系,是实现的关系
创建Fathers接口
public interface Fathers {
public abstract void drink(String beer);
}
创建Mathers接口
public interface Mathers {
//接口中的方法为抽象方法
//做饭
public abstract void cook();
}
创建son
public class Son implements Fathers,Mathers{
//重写mother接口
@Override
public void cook() {
// TODO Auto-generated method stub
}
//重写father接口
@Override
public void drink(String beer) {
// TODO Auto-generated method stub
System.out.println("儿子喜欢"+beer);
}
//主方法
public static void main(String[] args) {
Son s=new Son();
s.drink("哈啤");
}
}
接口中的方法默认是public abstract
接口和继承可以同时使用,但不介意使用
接口与类
1、类与类————继承(单继承)
2、类与接口————实现(多继承)
3、接口与接口————继承(多继承)
一个.java可以同时声明接口、普通类、抽象类,虽然存在同一个java文件中,但是会编译成各自的class文件
关于接口与类
类:被接口实现的类叫实现类、
方法**
jdk8———接口新特性
jdk8以后可以在接口中创建一个默认方法,此方法可以是非抽象