自己做的一点笔记...
抽象类:使用关键词 abstract 进行修饰,抽象类不能生成对象(实例化),且含有抽象方法(使用 abstract 进行声明,并且没有方法体)。
特点:
1️⃣ 抽象类不一定有抽象方法,但是有 abstract 修饰的方法,则其必须是抽象类;
2️⃣ 子类如果继承了抽象类,则必须重写抽象类中的方法;
3️⃣ 抽象类不能定义为 private 因为,它需要通过继承,才能有意义(子类不能修改 private 修饰的类的成员);
4️⃣ 如果子类继承了抽象类,但是没有实现父类的抽象方法,则子类也必须定义为抽象类。
作用:抽象类,给事物进行抽象,如果一些某些事物拥有同样的行为,就可以通过抽象类来统一进行规范,例如通过定义泛型的抽象类:
package leetcode.abstructs; import java.util.List; /** * @todo 抽象类的应用测试 * @since 9:44 2019/1/29 * @author hanyf */ public abstract class MyAbstract<T> { private List<T> list; public MyAbstract() { } public MyAbstract(List<T> list) { this.list = list; } public void method(){ for (T t : list){ doLoop(t); } } /** * @todo 抽象方法,在实例化调用该类的此抽象方法,并且可以对它进行重写 * @since 9:51 2019/1/29 * @author hanyf * @params * @return */ public abstract void doLoop(T t); }
package leetcode.test; import leetcode.abstructs.MyAbstract; import java.util.ArrayList; import java.util.List; public class 抽象方法{ public static void main(String[] args) { List<String> list = new ArrayList<>(); int i = 20; while (i>0){ list.add("I'm String for "+ i); i--; } //抽象类的实现 //重写了抽象类方法实现 new MyAbstract<String>(list){ @Override public void doLoop(String s) { System.out.println(s); } }.method(); } }