抽象类 包含抽象方法的类 abstract 修饰
1、抽像类不可以被实例化 Person p = new Person(“bit”,10);
2、如果一个非抽象类继承了抽象类,必须要重写抽象类的抽像方法
3、如果是抽象类继承了抽象类,那么作为派生类的抽象类可以不实现基类的方法
4、Private abstract 不能同时出现 final :方法不能用 类也不能用
5、Public>protected>包访问权限>private
重写方法的时候:
派生类的访问权限一定要大于等于积累的访问权限
6、抽象类里面可以包含非抽象方法。
abstract class Person{
private String name ; 属性
public String getName(){ // 普通⽅方法
return this.name;
}
public void setName(String name){
this.name = name ;
}
// {}为方法体,所有抽象⽅法上不包含方法体
public abstract void getPersonInfo() ; //抽象方法
}
class Student extends Person{
public void getPersonInfo(){
System.out.println("I am a student");
}
}
public class Test{
public static void main(String[] args) {
Person per = new Student() ; //实例化子类,向上转型
per.getPersonInfo() ; //被子类所覆写的方法
}
}
//类加载机制 双亲委派机制
//钩子方法 hook方法
Public boolean isAddOtherThings(){
}
模板模式
完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;
就可以子啊父类中定义一个完成该事情的总方法。每个步骤的具体实现,由子类完成。
abstract class 类名{
public final void{
}
Public abstract void fun(){
}
Final void make Drink();
//钩子方法 hook方法
模板设计模式
abstract class BankTemplate{
public final void takeNumber(){
System.out.println("1、取号");
}
public abstract void transact();
public final void evaluate(){
System.out.println("3、业务评价");
}
final void process(){
takeNumber();
transact();
if(isEvaluate()){
evaluate();
}
}
public boolean isEvaluate(){
return true;
}
}
class User1 extends BankTemplate{
@Override
public void transact() {
System.out.println("2、我要取一个亿");
}
@Override
public boolean isEvaluate() {
return false;
}
}
class User2 extends BankTemplate{
@Override
public void transact() {
System.out.println("2、我要存十个亿");
}
}
public class TestDemo2 {
public static void main(String[] args) {
BankTemplate bankTemplate=new User1();
bankTemplate.process();
BankTemplate bankTemplate2=new User2();
bankTemplate2.process();
}
}
import java.util.Scanner;
abstract class OnlineShopping {
public final void browseGoods() {
System.out.println("1、浏览商品");
}
public final void selectGoods() {
System.out.println("2、选择商品");
}
public abstract void callService();
public final void computerPrice() {
System.out.println("4、结算");
}
public abstract void orderPay();
public abstract void sendService();
public final void showOrder() {
System.out.println("7、查看订单");
}
final void process() {
browseGoods();
selectGoods();
if (isCallService()) {
callService();
}
computerPrice();
orderPay();
sendService();
showOrder();
}
public boolean isCallService() {
return true;
}
}
class Jd extends OnlineShopping {
@Override
public void callService() {
System.out.println("3、您好,京东客服为您服务");
}
public String getAnswer(){
System.out.println("请问您需要客服服务吗?要:y 不要:n");
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
return str;
}
public boolean isCallService() {
String str = getAnswer();
if (str.equals("y")) {
return true;
} else
return false;
}
@Override
public void orderPay() {
System.out.println("5、微信支付");
}
@Override
public void sendService() {
System.out.println("6、京东配送");
}
}
public class TestDemo1{
public static void main(String[] args) {
OnlineShopping onlineShopping=new Jd();
onlineShopping.process();
// Jd jd=new Jd();
// jd.process();
}
}