javaSE基础面向对象笔记(5)抽象接口区别,默认方法和静态方法

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.默认方法和静态方法的对比
存在默认方法和静态方法, 简化实现类的实现

  1. 静态方法 只能由接口名字调用, 不允许重写, 在所有实现类都满足功能的时候, 静态方法, 可以减少实现类创建对象的过程
  2. 默认方法: 总有一些特殊的实现类,方法体不同, 需要重写, 只能考虑默认方法
    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();
	}
}

猜你喜欢

转载自blog.csdn.net/Echoxxxxx/article/details/112440850