可運(yùn)行的:
創(chuàng)新互聯(lián)是一家專業(yè)提供晉安企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為晉安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
import java.awt.*;
import java.awt.event.*;
public class BackJFrame extends Frame{
public BackJFrame(){
super("臺(tái)球");
setSize(300,300);
setBackground(Color.cyan); //背景
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing (WindowEvent e)
{System.exit(0);}
} );
}
public static void main(String args[]){
new BackJFrame();
}
}
措施一:改寫類的實(shí)例方法
通過(guò)類繼承實(shí)現(xiàn)代碼重用不是精確的代碼重用技術(shù),因此它并不是最理想的代碼重用機(jī)制。換句話說(shuō),如果不繼承整個(gè)類的所有方法和數(shù)據(jù)成員,我們無(wú)法重用該類里面的單個(gè)方法。繼承總是帶來(lái)一些多余的方法和數(shù)據(jù)成員,它們總是使得重用類里面某個(gè)方法的代碼復(fù)雜化。另外,派生類對(duì)父類的依賴關(guān)系也使得代碼進(jìn)一步復(fù)雜化:對(duì)父類的改動(dòng)可能影響子類;修改父類或者子類中的任意一個(gè)類時(shí),我們很難記得哪一個(gè)方法被子類覆蓋、哪一個(gè)方法沒(méi)有被子類覆蓋;最后,子類中的覆蓋方法是否要調(diào)用父類中的對(duì)應(yīng)方法有時(shí)并不顯而易見(jiàn)。
任何方法,只要它執(zhí)行的是某個(gè)單一概念的任務(wù),就其本身而言,它就應(yīng)該是首選的可重用代碼。為了重用這種代碼,我們必須回歸到面向過(guò)程的編程模式,把類的實(shí)例方法移出成為全局性的過(guò)程。為了提高這種過(guò)程的可重用性,過(guò)程代碼應(yīng)該象靜態(tài)工具方法一樣編寫:它只能使用自己的輸入?yún)?shù),只能調(diào)用其他全局性的過(guò)程,不能使用任何非局部的變量。這種對(duì)外部依賴關(guān)系的限制簡(jiǎn)化了過(guò)程的應(yīng)用,使得過(guò)程能夠方便地用于任何地方。當(dāng)然,由于這種組織方式總是使得代碼具有更清晰的結(jié)構(gòu),即使是不考慮重用性的代碼也同樣能夠從中獲益。
我寫了一個(gè),內(nèi)容比較簡(jiǎn)單的。代碼如下:public class AnimalTest {
Animal animal;
public void eat(Animal animal){
animal.eat();
}
public void walk(Animal animal){
animal.walk();
}
public static void main(String args[]){
Animal animal=new Animal("animal");
Wolf w=new Wolf("wolf");
Goat g=new Goat("goat");
AnimalTest at=new AnimalTest();
at.eat(animal);
at.eat(w);
at.eat(g);
at.walk(animal);
at.walk(w);
at.walk(g);
}
}
class Animal {
String name;
public Animal(String name){
this.name=name;
}
public Animal(){}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void eat(){
System.out.println("animal eat");
}
public void walk(){
System.out.println("animal walk");
}
public String toString(){
return name;
}
}class Wolf extends Animal {
public Wolf(String name){
super(name);
}
public Wolf(){}
public void eat(){
System.out.println("wolf eat meat");
}
public void walk(){
System.out.println("wolf walk");
}
public String toString(){
return name;
}
}class Goat extends Animal {
public Goat(String name){
super(name);
}
public Goat(){}
public void eat(){
System.out.println("goat eat grass");
}
public void walk(){
System.out.println("goat walk");
}
public String toString(){
return name;
}
}
第一個(gè):
public?class?Yaojing?{
protected?String?name;
protected?int?age;
protected?String?gender;
public?void?showBasicInfo()?{
System.out.println(toString());
}
public?void?eatTangSeng()?{
System.out.println("吃飽了");
}
@Override
public?String?toString()?{
return?"Yaojing?[name="?+?name?+?",?age="?+?age?+?",?gender="?+?gender?+?"]";
}
}
第二個(gè)類
public?class?Zhizhujing?extends?Yaojing?{
public?void?buildNet(){
System.out.println("蜘蛛在織網(wǎng)");
}
}
第三個(gè)類
public?class?Baigujing?extends?Yaojing?{
public?void?beBeauty(){
System.out.println("白骨精");
}
}
package?extend;
/**
*?圓類
*?@author?楓雅
*?2019年3月21日
*/
public?class?Circle?{
private?double?r;
public?final?static?double?PI?=?3.14;
public?Circle(double?r)?{
this.r?=?r;
}
public?double?Circumference(double?r)?{
return?2*PI*r;
}
public?double?Area(double?r)?{
return?PI*r*r;
}
}
package?extend;
/**
*?圓柱類,繼承自圓類
*?@author?楓雅
*?2019年3月21日
*/
public?class?Cylinder?extends?Circle{
private?double?h;
public?Cylinder(double?r,?double?h)?{
super(r);
this.h?=?h;
}
public?double?CeArea(double?r,?double?h)?{
return?super.Circumference(r)*h;
}
public?double?Volume(double?r,?double?h)?{
return?super.Area(r)*h;
}
}
package?extend;
/**
*?圓錐類,繼承自圓柱類
*?@author?楓雅
*?2019年3月21日
*/
public?class?Cone?extends?Cylinder{
public?Cone(double?r,?double?h)?{
super(r,?h);
}
public?double?CeArea(double?r,?double?h)?{
return?super.CeArea(r,?h)/2;
}
public?double?Volume(double?r,?double?h)?{
return?super.Volume(r,?h)/3;
}
}
package?extend;
/**
*?測(cè)試類
*?@author?楓雅
*?2019年3月21日
*/
public?class?Test?{
public?static?void?main(String[]?args)?{
double?r?=?3;
double?h?=?2;
Circle?circle?=?new?Circle(r);
System.out.println("半徑為:"?+?r?+?"?圓的周長(zhǎng)為:"?+?circle.Circumference(r));
System.out.println("半徑為:"?+?r?+?"?圓的面積為:"?+?circle.Area(r));
Cylinder?cylinder?=?new?Cylinder(3,?2);
System.out.println("底部半徑為:"?+?r?+?",高為:"?+?h?+?"?圓柱的側(cè)面積為:"?+?cylinder.CeArea(r,?h));
System.out.println("底部半徑為:"?+?r?+?",高為:"?+?h?+?"?圓柱的體積為:"?+?cylinder.Volume(r,?h));
Cone?cone?=?new?Cone(3,?2);
System.out.println("底部半徑為:"?+?r?+?",高為:"?+?h?+?"?圓錐的側(cè)面積為:"?+?cone.CeArea(r,?h));
System.out.println("底部半徑為:"?+?r?+?",高為:"?+?h?+?"?圓錐的體積為:"?+?cone.Volume(r,?h));
}
}