多態編程題
你好!很高興為你解答。
借鑒了樓上,認為樓上講得不夠體現,雖然核心代碼編了出來了,但沒能講到多態的點子上。我稍作修改,樓主請看:
運行結果:
********************
汽車在行駛
摩托車在行駛
自行車在行駛
************代碼如下*************
package TestPolymorphism;
/**
*
* @author 葉科良,568145421
*/
public class TestPolymorphism {
public static void main(String[] args) {
TravelTool travelTool = new Car();
travelTool.run();//一樣的語句,不一樣的功能,改動處則少
travelTool = new Moto();
travelTool.run();//一樣的語句,不一樣的功能,改動處則少
travelTool = new Bike();
travelTool.run();//一樣的語句,不一樣的功能,改動處則少
}
}
abstract class TravelTool {
abstract void run() ; //行駛
abstract void stop(); //剎車
}
class Car extends TravelTool {
void run() {
System.out.println("汽車在行駛");
}
void stop() {
System.out.println("汽車在剎車");
}
}
class Moto extends TravelTool {
void run() {
System.out.println("摩托車在行駛");
}
void stop() {
System.out.println("摩托車在剎車");
}
}
class Bike extends TravelTool {
void run() {
System.out.println("自行車在行駛");
}
void stop() {
System.out.println("自行在剎車");
}
}
B. Java關於繼承、多態(介面和包)的編程題
package animal.mammal;
// 狗類
public class Dog extends Mammal{
void speak(){
System.out.println("Woof!");
}
void yaoweiba(){
System.out.println("Tail wagging...");
}
void qitaoshiwu(){
System.out.println("begging for food...");
}
}
// 同理寫貓,馬,豬,其中都必須有方法 void speak() 輸出各不相同,其他方法自定義
public class Cat extends Mammal{
}
public class Horse extends Mammal{
}
public class Pig extends Mammal{
}
// 另外是寵物貓,寵物狗的
package animal.mammal.pet;
public class PetCat extends Cat{
doucle price = 40.00;
String ownername = peter;
void Price(){
System.out.println("PetCat price:" + this.price);
}
void Owner(){
System.out.println("this's " + this.ownername +" petCat");
}
}
// 同理寫寵物狗的,如果需要 get/set 則為 price,ownername 加上該方法
public class PetDog extends Dog{
}
C. java 關於繼承、多態的練習題
菜鳥的嘗試,如果有什麼錯誤和不妥,歡迎指出。
Public class child{
}
Public class error1 extends child(
érror1(){
}
Void testFail(){
}
}
Public class error2 extends child(
érror2(){
}
Void steals(){
}
}
Public class parents{
parents(){
}
Public static void print(child error){
If(error instanceof error1){
Print("談心")
}
If(error instanceof error2){
Print("挨打")
}
}
Public static void main (string[] args){
Parents parent= new parents();
Error errora1 = new error1();
Error errora2 = new error2();
Parent.print(errora1);
Parent.print(errora2);
}
大概就這樣了,純手機敲出來的,很多語法不對,
但是看下思路還是看出來的。
D. C++編程題 關於 繼承和多態 的
首先你的第一個問題,d.vf2();這里涉及到一個c++的原則,子類有父類的同名函數,如果不是虛函數的話,則會「隱藏」父類的函數,不管參數是否一致,都會隱藏!所以你的dd::vf2(int
i)這個函數就把bb::vf2()隱藏了,因此dd就不會繼承這個函數。至於為什麼這么設計,以前貌似看某處b.s的訪談,說為了減小出錯的幾率,以免子類的使用者不小心誤使用了父類的函數。
看起來貌似第二個問題和第一個問題是一樣的,但是結果卻不同,其實你應該去了解下c++的對象模型,你就知道它的運作機理了。
對於虛函數,是動態綁定的,在對象內部有一個虛函數表,表裡面是一個個的函數指針,指向當前對象的各個虛函數真正的代碼,當你代碼執行到調用虛函數那裡的時候,會去這個表裡面查,然後取出函數指針再調用。
如果是非虛函數,則是靜態綁定的,也就是說在編譯的時候就已經確定要調用哪個函數!
不管b::vf2、d::vf2、d::vf3都是非虛函數,都會發生靜態綁定。
也就是說編譯器在編譯代碼的時候就會決定到底調用哪個函數。它怎麼決定呢?看類型。如下:
bp->vf2();
//這句話,編譯器看到了bp是b*類型的,於是就去找b::vf2()這個函數,找到了於是綁定成功。
d.vf2();
//這句話,編譯器看到d是d類型的,於是去找d::vf2()這個函數,由於上面提到的隱藏原則,d不存在這個函數,於是沒找到,出錯。
dp->vf2();
//這句話,編譯器看到dp是d*類型的,去找d::vf2()這個函數,於是同上,找不到,出錯。
dp->vf3();//編譯器看到dp是d*類型的,於是找d::vf3()這個函數,找到了,於是綁定成功。
分析完這四句編譯器的行為,你就明白了吧。
我寫這么多,你好歹多加點分吧……
E. java繼承多態的練習題
Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。
java多態存在的三個必要條件:
1.需要有繼承關系的存在
2.需要有方法的重寫
3.需要有父類的引用指向子類對象
希望對你有幫助。
第一題應該選D,第二題選C,D。
第一題屬於多態,methodB()方法屬於子類,父類沒有重寫子類的方法
第二題屬於繼承,子類可以繼承父類的方法
F. 一道JAVA編程題(繼承與多態)
很有難度啊、題目也比較發散、選擇性太多、太大、真是無從下手啊。。。
G. 就是一道c++關於繼承和多態的編程題,有沒有人願意幫做一下,挺急的
感覺演算法定義的非常差,一個類可以處理的事,要派生多個。。
再者,業務可以封裝到一個邏輯裡面,具體邏輯怎麼控制,你既然清楚計算規則,應該很容易寫出來。
如果是畢業設計作業的話,也就應付一下老師而已。
H. C++繼承多態簡單編程題
實現代碼如下:
#include<string>
#include<iostream>
classPet
{
public:
std::stringcolor;
intweight;
intage;
public:
virtualvoidspeak(){
std::cout<<"Petspeak..."<<std::endl;
}
};
classCat:publicPet
{
voidspeak(){
std::cout<<"Cat:miaomiaomiao..."<<std::endl;
}
};
classDog:publicPet
{
voidspeak(){
std::cout<<"Dog:wangwangwang..."<<std::endl;
}
};
intmain(intargc,char**args)
{
Pet*pet;
Catcat;
pet=&cat;
pet->speak();
Dogdog;
pet=&dog;
pet->speak();
}
I. java多態性的編程題目
publicclassPeople{
privateStringname;
privateIntegerage;
privateStringphone;
publicStringgetMessage(){
return"People:姓名:"+name+",年齡:"+age+",電話:"+phone;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicIntegergetAge(){
returnage;
}
publicvoidsetAge(Integerage){
this.age=age;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
this.phone=phone;
}
}
{
privateIntegerid;
publicStringgetMessage(Integerid){
return"Student:姓名:"+super.getName()+",年齡:"+super.getAge()+",電話:"+super.getPhone()+",學號:"+id;
}
publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
}
publicclassS{
publicstaticvoidmain(String[]args){
Studentstudent=newStudent();
student.setId(13);
student.setName("李三");
student.setAge(18);
student.setPhone("123-4567-8901");
System.out.println(student.getMessage(student.getId()));
}
}
J. c++關於繼承和多態性的編程題,求大神帶我飛
classPet
{
public:
Pet(stringc="",floatw=0,inta=0):color(c),weight(w),age(a){}
stringgetColor(){returncolor;}
virtualvoidspeak()=0;//純虛函數
private:
stringcolor;
floatweight;
intage;
};
classDog:publicPet
{
public:
Dog(stringc,floatw,inta):Pet(c,w,a){}
voidspeak()
{
cout<<getColor()<<"狗說:汪汪~ ";
}
};
classCat:publicPet
{
public:
Cat(stringc,floatw,inta):Pet(c,w,a){}
voidspeak()
{
cout<<getColor()<<"貓說:喵喵~ ";
}
};
intmain(){
Pet*p=0;
Dogd("黃",10,2);
Catc("花",1.5,3);
p=&d;p->speak();
p=&c;p->speak();
return0;
}