:
(一)、使用抽象類和抽象方法模擬不同人種
世界上有很多人種,例如中國人、美國人等,他們所說的語言各不相同。不管是什么人種,他們都是人類
世界上有很多人種,例如中國人、美國人等,他們所說的語言各不相同。不管是什么人種,他們都是人類
實現步驟:
(1) 創建一個抽象類Person,屬性:name 和age
(2) 在Person 類中定義一個抽象方法say()
(3) 創建Chinese 類繼承Person
(4) 創建American 類繼承Person
(1) 創建一個抽象類Person,屬性:name 和age
(2) 在Person 類中定義一個抽象方法say()
(3) 創建Chinese 類繼承Person
(4) 創建American 類繼承Person
package aaaw;
public abstract class Person {
public String name;
public int age;
public abstract void say() ;
public String name;
public int age;
public abstract void say() ;
}
package aaaw;
public class Chiness extends Person{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("說中文");
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("說中文");
}
}
package aaaw;
package aaaw;
public class American extends Person{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("說英語");
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("說英語");
}
}
(二)、雇員示例:
需求:
公司中程序員有姓名、工號、薪水、工作內容。
項目經理除了有姓名、工號、薪水、還有獎金、工作內容。
對給出需求進行數據建模。
需求:
公司中程序員有姓名、工號、薪水、工作內容。
項目經理除了有姓名、工號、薪水、還有獎金、工作內容。
對給出需求進行數據建模。
分析:
在這個問題領域中,先找出設計的對象。通過提煉法。
程序員Programmer:
屬性:姓名name、工號id、薪水sal
行為:工作work
在這個問題領域中,先找出設計的對象。通過提煉法。
程序員Programmer:
屬性:姓名name、工號id、薪水sal
行為:工作work
經理Manager:
屬性:姓名name、工號id、薪水sal、獎金bouns。
行為:工作work
屬性:姓名name、工號id、薪水sal、獎金bouns。
行為:工作work
序員和經理都屬性公司員工,共性資源可以進行抽取。因為他們都是公司的雇員可以將程序員和經理進行抽取,建立體系。
abstract class Employee{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay){
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
//描述程序員
class Programmer extends Employee{
Programmer(String name,String id,double pay){
super(name,id,pay);
}
public void work(){
System.out.println("code ...");
}
}
//描述經理
class Manager extends Employee{
private int bouns;
Manager(String name,String id,double pay,int bounus){
super(name,id,pay);
this.bouns = bouns;
}
public void work(){
System.out.println("manager");
}
}
public class AbstractTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
class Person{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setname(String name){
this.name = name;
}
}
class Student extends Person{
Student(String name,int age){
super(name,age);
}
}
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay){
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
//描述程序員
class Programmer extends Employee{
Programmer(String name,String id,double pay){
super(name,id,pay);
}
public void work(){
System.out.println("code ...");
}
}
//描述經理
class Manager extends Employee{
private int bouns;
Manager(String name,String id,double pay,int bounus){
super(name,id,pay);
this.bouns = bouns;
}
public void work(){
System.out.println("manager");
}
}
public class AbstractTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
class Person{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setname(String name){
this.name = name;
}
}
class Student extends Person{
Student(String name,int age){
super(name,age);
}
}
(三)、抽象類與繼承
設計一個能細分為矩形、三角形、圓形和橢圓形的“圖形”類。使用繼承將這些圖形分類,找出能作為基類部分的共同特征(如校准點)和方法(如畫法、初始化),並看看這些圖形是否能進一步划分為子類。
本題只考慮實現思想,不考慮具體實現的細節,實現方式可自由發揮。
設計一個能細分為矩形、三角形、圓形和橢圓形的“圖形”類。使用繼承將這些圖形分類,找出能作為基類部分的共同特征(如校准點)和方法(如畫法、初始化),並看看這些圖形是否能進一步划分為子類。
本題只考慮實現思想,不考慮具體實現的細節,實現方式可自由發揮。
package com.Oracle.oop5_1;
public abstract class Shape {
public Shape(Shape s) {
}
public Shape() {
}
public abstract double getArea();
}
public Shape(Shape s) {
}
public Shape() {
}
public abstract double getArea();
}
package com.Oracle.oop5_1;
public class Rectangle extends Shape {
double width;
double length;
public Rectangle(double width, double length) {
super();
this.width = width;
this.length = length;
}
double width;
double length;
public Rectangle(double width, double length) {
super();
this.width = width;
this.length = length;
}
public double getArea() {
return width*length;
}
}
return width*length;
}
}
package com.Oracle.oop5_1;
public class Triangle extends Shape {
double bottom;
double height;
public Triangle(double bottom, double height) {
super();
this.bottom = bottom;
this.height = height;
}
public double getArea() {
return 1/2.0*this.bottom*this.height;
}
double bottom;
double height;
public Triangle(double bottom, double height) {
super();
this.bottom = bottom;
this.height = height;
}
public double getArea() {
return 1/2.0*this.bottom*this.height;
}
}
package com.Oracle.oop5_1;
public class Circle extends Shape {
double radius;
public Circle(double radius) {
this.radius=radius;
}
public double getArea() {
return this.radius*this.radius*Math.PI;
}
double radius;
public Circle(double radius) {
this.radius=radius;
}
public double getArea() {
return this.radius*this.radius*Math.PI;
}
}
package com.Oracle.oop5_1;
import com.Oracle.oop5_1.Circle;
public class Oval extends Circle {
double radiusShort;
public Oval(double radius,double radiusShort) {
super(radius);
this.radiusShort=radiusShort;
}
public double getArea() {
return 1/2.0*radius*radiusShort;
}
}
double radiusShort;
public Oval(double radius,double radiusShort) {
super(radius);
this.radiusShort=radiusShort;
}
public double getArea() {
return 1/2.0*radius*radiusShort;
}
}
package com.Oracle.oop5_1;
public class Text1 {
public static void main(String[] args) {
Shape s1=new Circle(5.2);
System.out.println(s1.getArea());
Shape s2=new Rectangle(8.7,9.1);
System.out.println(s2.getArea());
Shape s3=new Triangle(4,3);
System.out.println(s3.getArea());
Shape s4=new Oval(3,4);
System.out.println(s4.getArea());
}
}
public static void main(String[] args) {
Shape s1=new Circle(5.2);
System.out.println(s1.getArea());
Shape s2=new Rectangle(8.7,9.1);
System.out.println(s2.getArea());
Shape s3=new Triangle(4,3);
System.out.println(s3.getArea());
Shape s4=new Oval(3,4);
System.out.println(s4.getArea());
}
}
(四)、抽象類:
創建一個Vehicle類並將它聲明為抽象類。在Vehicle類中聲明一個NoOfWheels方法,使它返回一個字符串值。創建兩個類Car和Motorbike從Vehicle類繼承,並在這兩個類中實現NoOfWheels方法。在Car類中,應當顯示“四輪車”信息;而在Motorbike類中,應當顯示“雙輪車”信息。創建另一個帶main方法的類,在該類中創建Car和Motorbike的實例,並在控制台中顯示消息
創建一個Vehicle類並將它聲明為抽象類。在Vehicle類中聲明一個NoOfWheels方法,使它返回一個字符串值。創建兩個類Car和Motorbike從Vehicle類繼承,並在這兩個類中實現NoOfWheels方法。在Car類中,應當顯示“四輪車”信息;而在Motorbike類中,應當顯示“雙輪車”信息。創建另一個帶main方法的類,在該類中創建Car和Motorbike的實例,並在控制台中顯示消息
package
MXDX21;
public
class
car
extends
Vehicle {
public
String NoOfWheels(){
return
"四輪車"
;
}
}
package
MXDX21;
public
class
Motorbike
extends
Vehicle {
public
String NoOfWheels(){
return
"兩輪車"
;
}
}
package
MXDX21;
public
class
test {
public
static
void
main(String[] args) {
car c=
new
car();
//創建car類的實例
System.out.println(c.NoOfWheels());
Motorbike m=
new
Motorbike();
//創建Motorbike類的實例
System.out.println(m.NoOfWheels());
}
}
package
MXDX21;
public
abstract
class
Vehicle {
//抽象方法NoOfWheels方法返回交通工具類的輪子個數
abstract
String NoOfWheels();
}
五)、抽象類、繼承、接口綜合【選做】
設計一個系統:
XXX門的實現過程:
流程:
設計一張抽象的門Door,那么對於這張門來說,就應該擁有所有門的共性,開門openDoor()和關門closeDoor();然后對門進行另外的功能設計,防盜--theftproof()、防水--waterproof()、防彈--bulletproof()、防火、防銹……
要求:利用繼承、抽象類、接口的知識設計該門
設計一個系統:
XXX門的實現過程:
流程:
設計一張抽象的門Door,那么對於這張門來說,就應該擁有所有門的共性,開門openDoor()和關門closeDoor();然后對門進行另外的功能設計,防盜--theftproof()、防水--waterproof()、防彈--bulletproof()、防火、防銹……
要求:利用繼承、抽象類、接口的知識設計該門
public interface jiben {
void opendoor();
void closedoor();
}
public class gongneng implements jiben {//創建一個方法類,並連接基本接口
public void opendoor() {
// TODO 自動生成的方法存根
System.out.println("開門");
}
// TODO 自動生成的方法存根
System.out.println("開門");
}
public void closedoor() {
// TODO 自動生成的方法存根
System.out.println("關門");
}
public void theftproof(){//加入方法
System.out.println("防盜");
}
public void waterproof(){
System.out.println("防水");
}
public void bulletproof(){
System.out.println("防彈");
}
}
public class gongneng implements jiben {//創建一個方法類,並連接基本接口
// TODO 自動生成的方法存根
System.out.println("關門");
}
public void theftproof(){//加入方法
System.out.println("防盜");
}
public void waterproof(){
System.out.println("防水");
}
public void bulletproof(){
System.out.println("防彈");
}
}
public class gongneng implements jiben {//創建一個方法類,並連接基本接口
public void opendoor() {
// TODO 自動生成的方法存根
System.out.println("開門");
}
// TODO 自動生成的方法存根
System.out.println("開門");
}
public void closedoor() {
// TODO 自動生成的方法存根
System.out.println("關門");
}
public void theftproof(){//加入方法
System.out.println("防盜");
}
public void waterproof(){
System.out.println("防水");
}
public void bulletproof(){
System.out.println("防彈");
}
}
public class gongneng implements jiben {//創建一個方法類,並連接基本接口
// TODO 自動生成的方法存根
System.out.println("關門");
}
public void theftproof(){//加入方法
System.out.println("防盜");
}
public void waterproof(){
System.out.println("防水");
}
public void bulletproof(){
System.out.println("防彈");
}
}
public class gongneng implements jiben {//創建一個方法類,並連接基本接口
public void opendoor() {
// TODO 自動生成的方法存根
System.out.println("開門");
}
// TODO 自動生成的方法存根
System.out.println("開門");
}
public void closedoor() {
// TODO 自動生成的方法存根
System.out.println("關門");
}
public void theftproof(){//加入方法
System.out.println("防盜");
}
public void waterproof(){
System.out.println("防水");
}
public void bulletproof(){
System.out.println("防彈");
}
}
// TODO 自動生成的方法存根
System.out.println("關門");
}
public void theftproof(){//加入方法
System.out.println("防盜");
}
public void waterproof(){
System.out.println("防水");
}
public void bulletproof(){
System.out.println("防彈");
}
}