1.1抽象类的概念
抽象类主要指不能具体实例化的类并且使⽤ abstract 关键字修饰,也就是不能创建对象。
1.2 抽象⽅法的概念
抽象⽅法主要指不能具体实现的⽅法并且使⽤ abstract 关键字修饰,也就是没有⽅法体。
2.3 抽象类和抽象⽅法的关系
抽象类中可以有成员变量、构造⽅法、成员⽅法、静态成员等。
抽象类中可以没有抽象⽅法,也可以有抽象⽅法。
有抽象⽅法的类必须是抽象类,因此真正意义上的抽象类应该具有抽象⽅法且使⽤ abstract 关键字修饰。
2.4 抽象类的实际意义
抽象类的实际意义不在于创建对象⽽在于被继承。
当⼀个类继承抽象类后必须重写抽象⽅法,否则该类也变成抽象类.
public abstract class TesAbstract {
public TesAbstract() {
}
public abstract void show();
}
public class SubTesAbstract extends TesAbstract {
public void show(){
System.out.println("被迫写的");
}
public void test(){
System.out.println("独有的方法");
}
public static void main(String[] args){
TesAbstract testabstract = new SubTesAbstract();
testabstract.show();
((SubTesAbstract)testabstract).test();
}
}
2 接⼝
2.1 基本概念
2.1.1接⼝是⽐抽象类还抽象的类,体现在所有⽅法都为抽象⽅法。
2.1.2定义类的关键字是 class ,⽽定义接⼝的关键字是 interface 。
2.1.3可以实现多继承。
public class Goldhavemoney implements People,Child{
@Override
public void costMoney() {
System.out.println("iphone13 pro max, ipad pro2021,百达翡丽");
}
@Override
public void eat() {
System.out.println("炸鸡,汉堡,奶茶");
}
public static void main(String[] arg) {
People people = new Goldhavemoney();
people.eat();
System.out.println("--------------------------------");
Child child = new Goldhavemoney();
child.costMoney();
}
}
interface Child {
void costMoney();
}
interface People {
void eat();
}
package com.java.bean;
public class Goldhavemoney implements Child{
@Override
public void costMoney() {
System.out.println("iphone13 pro max, ipad pro2021,百达翡丽");
}
@Override
public void eat() {
System.out.println("炸鸡,汉堡,奶茶");
}
public static void main(String[] arg) {
People people = new Goldhavemoney();
people.eat();
System.out.println("--------------------------------");
Child child = new Goldhavemoney();
child.costMoney();
child.eat();
System.out.println("--------------------------------");
Goldhavemoney jinyouxin = new Goldhavemoney();
jinyouxin.costMoney();
jinyouxin.eat();
}
}
public interface Child extends People{
void costMoney();
}
public interface People {
void eat();
}
2.2类与接口的关系
名字 | 关键字 | 关系 |
类与类 | extends | 单继承 |
类与接口 | implements | 可以多继承 |
接口与接口 | extends | 可以多继承 |
注意
抽象类添加子类可以不重写,而接口增加方法实现类必须重写(Java8 before),从Java8开始添加新特性,接口可以有非抽象方法和静态方法,但是非静态方法用default,而且可以有私有方法。
1
public interface Child extends People{
void costMoney();
default void play(){
System.out.println("可以重写,也可以不重写");
}
}
2.为了解决default里面代码的重复性,采用提取,打包成方法(private)
public interface Child extends People{
void costMoney();
default void play1(){
//System.out.println("可以重写,也可以不重写");
play();
}
default void play2(){
//System.out.println("可以重写,也可以不重写");
play();
}
private void play(){
System.out.println("可以重写,也可以不重写");
}
}