1.抽象
抽象类:是因为没有必要创建对象
抽象方法:规范子类的实现
新增了一类方法
抽象方法
抽象类的构造方法存在的意义:让子类继承抽象类的属性和方法
抽象方法 不具体 没有大括号 方法体
final static private不能与abstract连用
当一个类无需创建对象的时候 可以考虑抽象类
public abstract class Person {
int age;
String name;
public Person() {
super();
}
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
public void eat() {
System.out.println("吃");
}
public void a() {
}
public abstract void sleep();
}
public class Student extends Person{
//如果父类中有抽象方法,则子类必须重写此方法
@Override
public void sleep() {
System.out.println("睡觉");
}
}
2.接口
接口和抽象类都不能创建对象
都有抽象方法
抽象类只能单继承,并且是同类食物进行继承
接口是多实现,多继承,接口可以做用在不同类型事务上,主要目的是为了给不同类别事务进行拓展功能
类与类之间:单继承
类与接口:多实现
接口与接口之间:多继承
public interface BlueTooth {
public void conn();
public void disconn();
}
public class Car implements BlueTooth{
@Override
public void conn() {
}
@Override
public void disconn() {
}
}
类与接口 实现的关系 implements
实现类 类名 implements 接口名字
一个类允许同时实现多个接口,多实现
可以拓展更多的功能
要先继承 再实现
接口都是抽象方法
class类
interface 接口
抽象方法
公共静态常量
静态常量
接口中的静态常量可以省略 public static final
抽象方法 可以省略 public abstract
public class OldComputer {
public void show() {
System.out.println("展示计算结果");
}
}
public interface Usb {
//静态常量
double SPEED = 3.2;
void insert();
public abstract void pop();
}
public interface Internet {
public void onLine();
public void offLine();
}
public interface BlueTooth {
public void conn();
public void disconn();
}
public class Computer extends OldComputer implements Usb,Internet,BlueTooth{
@Override
public void insert() {
System.out.println("U盘插入了");
}
@Override
public void pop() {
System.out.println("U盘弹出了");
}
@Override
public void onLine() {
System.out.println("联网了");
}
@Override
public void offLine() {
System.out.println("断网了");
}
@Override
public void conn() {
System.out.println("蓝牙已连接");
}
@Override
public void disconn() {
System.out.println("蓝牙已断开");
}
}
public class Test {
public static void main(String[] args) {
Computer computer = new Computer();
computer.insert();
computer.pop();
System.out.println(computer.SPEED);
}
}
默认方法:允许存在方法体
访问权限修饰符中 缺省 没有关键字,而不是用default
如果实现了一个 接口 有默认方法 不需要重写
如果同时实现了两个接口, 中有同名同参数的默认方法, 必须重写
可以通过 接口名字.super.方法名字() 调用指定接口中的方法
如果就是想要自己的逻辑 可以将提供好的 接口名字.super.方法名字() 删掉,写自己逻辑就可以了
public interface A {
public default void tongdian() {
System.out.println("通电");
}
}
public interface B {
//默认方法:允许存在方法体
public default void tongdian() {
System.out.println("zif");
}
}
public class LD implements A,B{
@Override
public void tongdian() {
}
public class TV implements A{
}
public class Test {
public static void main(String[] args) {
TV tv = new TV();
tv.tongdian();
}
}
3.默认方法和静态方法的对比
存在默认方法和静态方法, 简化实现类的实现
- 静态方法 只能由接口名字调用, 不允许重写, 在所有实现类都满足功能的时候, 静态方法, 可以减少实现类创建对象的过程
- 默认方法: 总有一些特殊的实现类,方法体不同, 需要重写, 只能考虑默认方法
4.抽象类和接口区别
语法:
1>抽象类使用abstract,接口使用interface
2>抽象类中可以包含抽象方法,也可以不包含,接口中只能包含抽象方法和静态常量,jdk1.8之后接口可以包含静态方法和默认方法。
3>抽象类和接口都不能实例化。
4>抽象类可以包含构造方法,接口中没有构造方法。
5> 抽象类 只能单继承, 类与接口 多实现 , 接口与接口是多继承
6> 子类继承抽象类 extends 实现类实现接口 implments
7> 抽象类: 创建对象是没有意义的, 不用创建
接口 : 拓展功能
抽象方法:规范子类的实现
功能:
1>抽象类一般用来表示同类事物,接口可以表示不是同类事物。
2>抽象类可以实现代码的重用,也可以约束子类的功能。接口就是约束实现类的功能,降低代码之间的耦合性。
public interface A {
public static void show() {
System.out.println("show time");
}
}
public class SubA implements A{
}
public class Test {
public static void main(String[] args) {
//接口中的静态方法 只能由接口名字调用
A.show();//一个功能 只需要接口调用,简化了实现类创建对象调用的过程
SubA subA = new SubA();
}
}