Java面向对象第四章
一.抽象类和抽象方法:
1.抽象类是专门设计用来让子类继承,抽象方法必须被子类重写。
2.在Java语言中,使用abstract关键字修饰一个类时,该类就是抽象类,使用abstract关键字修饰一个方法时该方法即为抽象方法。
3.抽象类和抽象方法的规则:
(1)一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类。
(2)抽象类不能被实列化,即不能被new创建一个实列对象。
(3)如果一个子类继承一个抽象类,则子类需要通过覆盖的方式来重写该抽象类中的所有抽象方法。如果子类没有完全重写抽象父类中所有的抽象方法,则子类仍是抽象的。
(4)抽象方法可以与public、protected复合使用,但不能与final、private和static复合使用。
4.抽象类的作用:
抽象类不能被实列化,只能作为父类被继承。
二.作业
1.创建三个动物类,分别是老虎类、猴子类和狼类,定义动物抽象父类,在该类中定义捕食抽象方法和非抽象方法进食,在该方法中调用捕食方法。
package com.chapter5;
public abstract class Animal {
public abstract void predation();
public void eat() {
System.out.println("嚼碎食物,将食物咽进肚子理...");
}
}
package com.chapter5;
public class Monkey extends Animal {
public void predation() {
System.out.println("猴子悠哉悠哉的爬到树上摘香蕉");
}
public void e() {
this.eat();
}
}
package com.chapter5;
public class Tiger extends Animal {
public void predation() {
System.out.println("老虎抓住了一头猎物");
}
public void a() {
this.eat();
}
}
package com.chapter5;
public class Wolf extends Animal {
public void predation() {
System.out.println("狼王组织狼群进攻抓住了猎物");
}
public void t() {
this.eat();
}
}
package com.chapter5;
public class Test {
public static void main(String[] args) {
Wolf w= new Wolf();
w.predation();
w.t();
Tiger t = new Tiger();
t.predation();
t.a();
Monkey m= new Monkey();
m.predation();
m.e();
}
}
2.雇员示例:
需求:公司中程序员有姓名,工号,薪水,工作内容
项目经理除了有姓名,工号,薪水还有奖金,工作内容
对给出需求进行数据建模
package com.chapter6;
public abstract class Company {
String name;
String id;
double salay;
public Company(String name,String id,double salay){
this.name = name;
this.id = id;
this.salay = salay;
}
public abstract void Work();
}
package com.chapter6;
public class PM extends Company {
double pmsalay;
public PM(String name, String id, double salay,double pmsalay) {
super(name, id, salay);
this.pmsalay = pmsalay;
}
public void Work() {
System.out.println("有事秘书干");
}
}
package com.chapter6;
public class Programmer extends Company {
public Programmer(String name, String id, double salay) {
super(name, id, salay);
}
public void Work() {
System.out.println("程序员");
}
}
package com.chapter6;
public class Test {
public static void main(String[] args) {
Company pm = new PM("小明", "13216464X", 1000000, 100000000);
Company pr = new Programmer("小红", "6546416541ez", 500);
pm.Work();
pr.Work();
}
}