1. 上轉型對象的定義是什麼?闡述自己對上轉型對象的理解,用文字描述。
上轉型:父類聲明,子類實例化叫做上轉型。
(自己的理解)上轉型對象可以利用父類中的全員變量和方法,當子類進行全員變量隱藏或方法重寫時,則用的是子類中的。上轉型對象不能用子類新增加的方法或變量。(強制轉換)
u (PPT的說法)1.上轉對象不能操作子類新增的成員變量,失掉了這部分屬性,不能使用子類新增的方法,失掉了一些功能。
u 2.上轉型對象可以操作子類繼承的成員變量,也可以使用子類繼承的或重寫的方法。
u 3.如果子類重寫了父類的某個方法後,當對象的上轉型對象調用這個方法時一定是調用了子類重寫的方法。因爲程序在運行時知道,這個上轉對象的實例是子類創建的,只不過損失了一些功能而已。
2. 多選題:
(1)下列關於父類與子類的說法錯誤的有( BCD)
A.在任何情況下,子類對象都可以訪問父類的受保護方法。
B.上轉型對象調用的是父類中的方法。
C.子類對象不能直接調用被子類重寫的父類中的方法。
D.上轉型對象可以調用子類新增的方法。
2. 創建一個抽象類水果Fruit,再分別創建Apple、Pear、Orange類繼承抽象類水果,分別在3個子類中定義成員變量和方法,然後再創建一個測試類Test,根據用戶的輸入,利用上轉型對象分別實例化不同的子類,表現多態的性質。
3. package Homework09_java;
4. /**
5. * 創建一個水果類做對象
6. * @author LENOVO
7. *
8. */
9. public class Fruit {
10. String color="橙色";
11. String size;
12. String name;
13.
14. public void name()
15. {System.out.println(this.name+" ");}
16. public void eating()
17. {System.out.println("直接吃 ");}
18. public void juice()
19. {System.out.println("做果汁 ");
20. }
21.
22.
23. }
24. package Homework09_java;
25. //創建一個蘋果類
26. public class Apple extends Fruit {
27. String name="蘋果";
28. String size="圓形";
29. String color="紅色";
30.
31.
32. public void eating()
33. {System.out.println("削皮吃");}
34.
35.
36. }
37. package Homework09_java;
38. //創建一個梨類
39. public class Pear extends Fruit {
40. String name="梨";
41. String color="黃色";
42. String size="梨形";
43. public void eating()
44. {
45. System.out.println("洗洗吃");
46.
47.
48. }
49.
50.
51. }
52. package Homework09_java;
53. //創建一個橘子類
54. public class Orange extends Fruit{
55. String name="橘子";
56. String size="圓形";
57.
58. public void eating()
59. {System.out.println("剝皮吃");}
60. public void eating(Fruit a)
61. {a.eating();}
62. public void juice(Fruit a)
63. {a.juice();}
64. public void color(Fruit a)
65. {System.out.println(""+a.color);}
66. public void size(Fruit a)
67. {System.out.println(""+a.size);}
68.
69. }
70. package Homework09_java;
71. import java.util.Scanner;
72. public class Test {
73. public static void main(String[] args)
74. {Scanner scanner=new Scanner(System.in);
75. System.out.println("請輸入一種水果");
76. String name1=scanner.next();
77. Test test=new Test();
78. Fruit apple=new Apple();
79. Fruit pear=new Pear();
80. Fruit orange=new Orange();
81. String fruit_01="蘋果";
82. String fruit_02="梨";
83. String fruit_03="橘子";
84. if(name1.equals(fruit_01))
85. {test.color(apple);
86. {test.size(apple);
87. {test.juice(apple);
88. test.eating(apple);
89.
90. if(name1.equals(fruit_02))
91. {test.color(pear);
92. {test.size(pear);
93. {test.juice(pear);
94. test.eating(pear);
95.
96. if(name1.equals(fruit_03))
97. {test.color(orange);
98. {test.size(orange);
99. {test.juice(orange);
100. test.eating(orange);
101.
102. }
103.
104.
105.
106. }
107.
108.
109.
110.
111. }
112. }
(上程序有問題,請求救援!!)
4. 猜數字遊戲。隨機產生一個1—100的整數,讓用戶去猜,猜大了(或者猜小了)都有提示;直到用戶猜對,提示成功,程序結束。
package Homework09_java;
import java.util.Scanner;
import java.util.Random;
public class GuessNumber {
public static void main(String[] args)
{Random rand=new Random();
int number=rand.nextInt(100);
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入一個值:");
while(true)
{int data=scanner.nextInt();
//用戶輸入的值
if (data>number)
{System.out.println("大了,請繼續輸入");
continue;}
if (data<number)
{System.out.println("小了,請繼續輸入");
continue;}
if (data==number)
{System.out.println("成功");
break;}
}
}
}
5. 一個正整數,如果恰好等於除它本身外的所有因子之和,這個數就稱爲“完數”。
例如6=1+2+3,編程找出1000以內的所有完數。
package Homework09_java;
public class Wanshu
{ void wanshu ()
{ int i,j,s=0;
for (i=1;i<=1000;i++)
{for (j=1;j<i;j++)
{if (i%j==0)
{s+=j;}
if (s==i)
System.out.println(i+"\t");
}
}
}
}
package Homework09_java;
public class Main {
public static void main(String[] args)
{Wanshu ws=new Wanshu();
ws.wanshu();
}
}
6. 輸出所有水仙花數(如果一個3位正整數的各個位數立方和等於這個數本身,稱爲水仙花數)。
package Homework09_java01;
public class DaffodilNumber {
public void main()
{int num,i,a,b,c;
for (i=100;i<1000;i++)
{num=i;
a=num%10;
num=num/10;
b=num%10;
num=num/10;
c=num%10;
if ((a*a*a+b*b*b+c*c*c)==i)
{
System.out.println(i );
}
}
}
}
package Homework09_java01;
public class Main {
public static void main(String [] args)
{DaffodilNumber dn=new DaffodilNumber();
dn.main();
}
}