2021-06-16

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.创建一个父类,拥由方法:计算面积getPer(),获取图形类型getType();三个子类三角形,圆形,矩形分别继承该父类,并实现对应的方法

package com.chapter4;

public abstract class Shape {
	public abstract double getS();
	public abstract String getN();
	public void show(){
		System.out.printf("%s\t%.2f\n",this.getN(),this.getS());
	}

}

package com.chapter4;

public class Triangle extends Shape {
	double d;
	double h;
	public Triangle(double d,double h){
		this.d=d;
		this.h=h;
	}
	public double getS(){
		return d*h/2;
	}; 
	public String getN(){
		return "三角形";
	};
}

package com.chapter4;

public class Rectangle extends Shape {
	double l;
	double w;
	
	public Rectangle(double l,double w){
		this.l=l;
		this.w=w;
	}
	public double getS(){
		return l*w;
	}; 
	public String getN(){
		return "矩形";
	};
}
package com.chapter4;

public class Circle extends Shape {
	double r;
	public Circle(double r){
		this.r=r;
	}
	public double getS(){
		return 3.14*r*r;
	}; 
	public String getN(){
		return "圆形";
	};
}

package com.chapter4;

public class Test {
	public static void main(String[] args) {
		Shape t = new Triangle(3,2);
		t.show();
		Shape r = new Rectangle(4, 4);
		r.show();
		Shape c = new Circle(3);
		c.show();
	}
	
}

3.雇员示例:
需求:公司中程序员有姓名,工号,薪水,工作内容
项目经理除了有姓名,工号,薪水还有奖金,工作内容
对给出需求进行数据建模

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();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值