抽象类:
不可以直接创建抽象类对象
抽象类也是一个普通
抽象类中也不是全部都是抽象方法
普通抽象类:
里面有抽象方法也有普通方法
纯抽象类:
类中全部都是抽象方法
Java 单一继承,所以抽象类用处不大
抽象类的好处就是约束:
在原来代码中你重不重写继承代码都无所谓(结构有点乱)
但是如果你加了抽象类如果你想继承我的抽象类就必须重写
public abstract class T1 {
public abstract void a();
public abstract void b();
}
——————————————————————————————————————————
public class T2 extends T1 {
@Override
public void a() {
}
@Override
public void b() {
}
}
接口:
继承一个类,实现多个接口
public class T2 extends T1 implements T3{
//或许有需要一个类的代码、并且实现接口的需求
@Override
public void a() {
}
@Override
public void b() {
}
}
接口的魅力:
只做规则不做实现、自己做实现结构不会乱
接口从底层了解 就是一个纯抽象类:
里面只有方法的声明,绝对没有方法的实现
万事万物皆接口
声明了接口就应该面向接口编程,你声明了接口,就一定要用接口做类型,创建子类对象
注意:
接口中的方法全部都是public的
接口中申请属性,立即变成常量
接口之间可以多继承
举例:首先申请3个借口A B C 用T1来实现
—————————————————————————————
public interface A {
public void a();
}
————————————————————————————
public interface B {
public void b();
}
—————————————————————————————
public interface C extends A ,B{
}
—————————————————————————————
public class T1 implements C {
//T1实现了A B C接口但因为C继承AB所以事先了a b方法
@Override
public void a() {
}
@Override
public void b() {
}
}
接口不可以继承抽象类
抽象类可以实现接口,也可以吧接口的方法转成抽象方法
public abstract class T1 implements C {//抽象类可以实现接口但他不会督促你实现方法
@Override//就是你不实现方法也没关系
public void a() {
}
@Override
public void b() {
}
}
接口中申请静态方法:
可以申请静态方法
可以申请default方法
可以申请私有方法
重要提醒:声明了接口,就必须面向接口编程 接口类型 s=new 子类()
public interface T1 {
public void X();
}
————————————————————————————————
public class T5 implements T1 {//首先申请接口就是面向父类编程
public static void main(String[] args) {
T1 t1 = new T5();//这里之所以用T1声明 创建T5是因为子类转换父类是自动转换的
t1.X();
}
@Override
public void X() {
System.out.println("嘻嘻哈哈");
}
}
设计模式:简单工厂:
工厂方法的入门模式
创建型设计模式、创建对象
工厂模式,将对象创建隐藏起来,不给你看到子类
public interface T1 {//首先需要申请一个接口因为是面向接口编程
public void t1();
}
——————————————————————————————————
public class T2 implements T1 {//第一个实现类
@Override
public void t1() {
System.out.println("t2");
}
}
——————————————————————————————
public class T3 implements T1 {//第二个实现类
@Override
public void t1() {
System.out.println("t3");
}
}
——————————————————————————————
public class GongChang {
public static T1 gc(String a) {//通过这里传入参数选择创建对象
if (a.equals("T2")) {//通过参数对比来选择创建的对象
T1 t1 = new T2();
return t1;
} else if (a.equals("T3")) {
T1 t2 = new T3();
return t2;
}
return null;//如果没有就选择空
}
public static void main(String[] args) {
T1 t1=gc("T2");//以接口类为对象类型,因为接口是在面向父类编程,
t1.t1();
}
}