当前位置:   article > 正文

头歌实践教学平台——Java面向对象之类和对象

头歌实践教学平台——Java面向对象之类和对象

目录

Java面向对象 - 封装、继承和多态的综合练习

封装、继承和多态进阶(一)

封装、继承和多态进阶(二)

封装、继承和多态进阶(三)

Java面向对象 - 封装、继承和多态

什么是封装,如何使用封装

什么是继承,怎样使用继承

super关键字的使用

方法的重写与重载

抽象类

final关键字的理解与使用

接口

什么是多态,怎么使用多态

Java面向对象 - 类与对象

什么是类,如何创建类

构造方法

选择题(一)        C        CD

This关键字

类与对象练习

static关键字

选择题(二)        D        EG        B

Java高级特性 - Java反射

了解 Class 对象

利用反射分析类的能力

在运行时使用反射分析对象

利用反射进行方法调用


Java面向对象 - 封装、继承和多态的综合练习

封装、继承和多态进阶(一)

  1. package case1;
  2. import java.util.Scanner;
  3. public class Task1 {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String dogName = sc.next();
  7. String dogSex = sc.next();
  8. String dogColor = sc.next();
  9. String catName = sc.next();
  10. String catSex = sc.next();
  11. double catWeight = sc.nextDouble();
  12. // 通过有参构造函数实例化Dog类对象dog
  13. // dog调用talk()方法
  14. // dog调用eat()方法
  15. /********* begin *********/
  16. Dog dog=new Dog (dogName,dogSex,dogColor);
  17. dog.talk();
  18. dog.eat();
  19. /********* end *********/
  20. // 通过有参构造函数实例化Cat类对象cat
  21. // cat调用talk()方法
  22. // cat调用eat()方法
  23. /********* begin *********/
  24. Cat cat=new Cat(catName,catSex,catWeight);
  25. cat.talk();
  26. cat.eat();
  27. /********* end *********/
  28. }
  29. }
  30. // 抽象类Pet 封装属性name和sex
  31. // 构造函数初始化name和sex
  32. // 声明抽象方法talk()
  33. // 声明抽象方法eat()
  34. abstract class Pet {
  35. /********* begin *********/
  36. public abstract void talk();
  37. public abstract void eat();
  38. private String name;
  39. private String sex;
  40. public String getname(){
  41. return name;
  42. }
  43. public void setname(String name){
  44. this.name=name;
  45. }
  46. public String getsex(){
  47. return sex;
  48. }
  49. public void setsex(String sex){
  50. this.sex=sex;
  51. }
  52. public Pet(String name,String sex){
  53. this.name=name;
  54. this.sex=sex;
  55. }
  56. /********* end *********/
  57. }
  58. // Dog类继承自Pet类 封装属性color
  59. // 构造函数初始化name、sex和color
  60. // 实现自己的talk()方法和eat()方法
  61. // talk()输出'名称:name,性别:sex,颜色:color,汪汪叫'
  62. // eat()输出'name吃骨头'
  63. class Dog extends Pet {
  64. /********* begin *********/
  65. private String color;
  66. public String getcolor(){
  67. return color;
  68. }
  69. public void setcolor(String color){
  70. this.color=color;
  71. }
  72. public Dog(String name,String sex,String color){
  73. super(name,sex);
  74. sex=super.getname();
  75. name=super.getname();
  76. this.color=color;
  77. }
  78. public void talk(){
  79. System.out.println("名称:"+super.getname()+",性别:"+super.getsex()+",颜色:"+color+",汪汪叫");
  80. }
  81. public void eat(){
  82. System.out.println(super.getname()+"吃骨头!");
  83. }
  84. /********* end *********/
  85. }
  86. // Cat类继承自Pet类 封装属性weight
  87. // 构造函数初始化name、sex和weight
  88. // 实现自己的talk()方法和eat()方法
  89. // talk()输出'名称:name,性别:sex,体重:weight kg,喵喵叫'
  90. // eat()输出'name吃鱼'
  91. class Cat extends Pet {
  92. /********* begin *********/
  93. /********* begin *********/
  94. private double weight;
  95. public double getweight(){
  96. return weight;
  97. }
  98. public void setweight(double weight){
  99. this.weight=weight;
  100. }
  101. public Cat(String name,String sex,double weight){
  102. super(name,sex);
  103. sex=super.getname();
  104. name=super.getname();
  105. this.weight=weight;
  106. }
  107. public void talk(){
  108. System.out.println("名称:"+super.getname()+",性别:"+super.getsex()+",体重:"+weight+"kg,喵喵叫");
  109. }
  110. public void eat(){
  111. System.out.println(super.getname()+"吃鱼!");
  112. }
  113. /********* end *********/
  114. }


封装、继承和多态进阶(二)

  1. package case2;
  2. import java.util.Scanner;
  3. public class Task2 {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String cName = sc.next();
  7. String cSex = sc.next();
  8. int cAge = sc.nextInt();
  9. String eName = sc.next();
  10. String eSex = sc.next();
  11. int eAge = sc.nextInt();
  12. // 创建测试类对象test
  13. // 创建Person类对象person1,引用指向中国人,通过有参构造函数实例化中国人类对象
  14. // 通过showEat()方法调用Chinese的eat()方法
  15. // 创建Person类对象person2,引用指向英国人,通过有参构造函数实例化英国人类对象
  16. // 通过showEat()方法调用English的eat()方法
  17. /********* begin *********/
  18. Person person1=new Chinese(cName,cSex,cAge);
  19. showEat (person1);
  20. Person person2=new English(eName,eSex,eAge);
  21. showEat (person2);
  22. /********* end *********/
  23. // 强制类型转换(向下转型) 调用Chinese类特有的方法shadowBoxing()
  24. // 强制类型转换(向下转型) 调用English类特有的方法horseRiding()
  25. /********* begin *********/
  26. Chinese chinese=(Chinese) person1;
  27. chinese.shadowBoxing();
  28. English english=(English) person2;
  29. english.horseRiding();
  30. /********* end *********/
  31. }
  32. // 定义showEat方法,使用父类作为方法的形参,实现多态,传入的是哪个具体对象就调用哪个对象的eat()方法
  33. /********* begin *********/
  34. //题目中没有static 这里应该定义一个静态方法,如果不定义静态方法的话,上面showeat(对象)无法正常调用
  35. public static void showEat(Person person){
  36. person.eat();
  37. }
  38. /********* end *********/
  39. }
  40. // 抽象类Person 封装属性name、sex和age
  41. // 构造函数初始化name、sex和age
  42. // 声明抽象方法eat()
  43. abstract class Person {
  44. /********* begin *********/
  45. private String name;
  46. private String sex;
  47. private int age;
  48. public String getname(){
  49. return name;
  50. }
  51. public void setname(String name){
  52. this.name=name;
  53. }
  54. public String getsex(){
  55. return sex;
  56. }
  57. public void setsex(String sex){
  58. this.sex=sex;
  59. }
  60. public int getage(){
  61. return age;
  62. }
  63. public void setage(int age){
  64. this.age=age;
  65. }
  66. public Person (String name,String sex,int age){
  67. this.name=name;
  68. this.sex=sex;
  69. this.age=age;
  70. }
  71. public abstract void eat();//定义抽象方法 让子类实现
  72. /********* end *********/
  73. }
  74. // Chinese类继承自Person类
  75. // 构造函数初始化name、sex和age
  76. // 重写父类方法eat() 输出'姓名:name,性别:sex,年龄:age,我是中国人,我喜欢吃饭!'
  77. // 定义子类特有方法shadowBoxing(),当父类引用指向子类对象时无法调用该方法 输出'name在练习太极拳!'
  78. class Chinese extends Person {
  79. /********* begin *********/
  80. public Chinese(String name,String sex,int age){
  81. super(name,sex,age);
  82. sex=super.getname();
  83. name=super.getname();
  84. age=super.getage();
  85. }
  86. public void eat(){ //实现抽象方法eat() 编写方法体
  87. System.out.println("姓名:"+super.getname()+",性别:"+super.getsex()+",年龄:"+super.getage()+",我是中国人,我喜欢吃饭!");
  88. }
  89. public void shadowBoxing(){
  90. System.out.println(super.getname()+"在练习太极拳!");
  91. }
  92. /********* end *********/
  93. }
  94. // English类继承自Person类
  95. // 构造函数初始化name、sex和age
  96. // 重写父类方法eat() 输出'姓名:name,性别:sex,年龄:age,我是英国人,我喜欢吃三明治!'
  97. // 定义子类特有方法horseRiding(),当父类引用指向子类对象时无法调用该方法 输出'name在练习骑马!'
  98. class English extends Person {
  99. /********* begin *********/
  100. public English(String name,String sex,int age){
  101. super(name,sex,age);
  102. sex=super.getname();
  103. name=super.getname();
  104. age=super.getage();
  105. }
  106. public void eat(){ //实现抽象方法eat() 编写方法体
  107. System.out.println("姓名:"+super.getname()+",性别:"+super.getsex()+",年龄:"+super.getage()+",我是英国人,我喜欢吃三明治!");
  108. }
  109. public void horseRiding(){
  110. System.out.println(super.getname()+"在练习骑马!");
  111. }
  112. /********* end *********/
  113. }


封装、继承和多态进阶(三)

  1. package case3;
  2. import java.util.Scanner;
  3. public class Task3 {
  4. public static void main(String[] args) {
  5. @SuppressWarnings("resource")
  6. Scanner sc = new Scanner(System.in);
  7. String pppName = sc.next();
  8. int pppAge = sc.nextInt();
  9. String bpName = sc.next();
  10. int bpAge = sc.nextInt();
  11. String ppcName = sc.next();
  12. int ppcAge = sc.nextInt();
  13. String bcName = sc.next();
  14. int bcAge = sc.nextInt();
  15. // 测试运动员(乒乓球运动员和篮球运动员)
  16. // 乒乓球运动员
  17. // 通过带参构造函数实例化PingPangPlayer对象ppp
  18. // 输出'name---age'
  19. // 分别调用sleep()、eat()、study()、speak()方法
  20. /********* begin *********/
  21. PingPangPlayer ppp=new PingPangPlayer(pppName,pppAge);
  22. System.out.println(pppName+"---"+pppAge);
  23. ppp.sleep();
  24. ppp.eat();
  25. ppp.study();
  26. ppp.speak();
  27. /********* end *********/
  28. System.out.println("----------------");
  29. // 篮球运动员
  30. // 通过带参构造函数实例化BasketballPlayer对象bp
  31. // 输出'name---age'
  32. // 分别调用sleep()、eat()、study()方法
  33. /********* begin *********/
  34. BasketballPlayer bp=new BasketballPlayer(bpName,bpAge);
  35. System.out.println(bpName+"---"+bpAge);
  36. bp.sleep();
  37. bp.eat();
  38. bp.study();
  39. /********* end *********/
  40. System.out.println("----------------");
  41. // 测试教练(乒乓球教练和篮球教练)
  42. // 乒乓球教练
  43. // 通过带参构造函数实例化PingPangCoach对象ppc
  44. // 输出'name---age'
  45. // 分别调用sleep()、eat()、teach()、speak()方法
  46. /********* begin *********/
  47. PingPangCoach ppc=new PingPangCoach(ppcName,ppcAge);
  48. System.out.println(ppcName+"---"+ppcAge);
  49. ppc.sleep();
  50. ppc.eat();
  51. ppc.teach();
  52. ppc.speak();
  53. /********* end *********/
  54. System.out.println("----------------");
  55. // 篮球教练
  56. // 通过带参构造函数实例化BasketballCoach对象bc
  57. // 输出'name---age'
  58. // 分别调用sleep()、eat()、teach()方法
  59. /********* begin *********/
  60. BasketballCoach bc=new BasketballCoach(bcName,bcAge);
  61. System.out.println(bcName+"---"+bcAge);
  62. bc.sleep();
  63. bc.eat();
  64. bc.teach();
  65. /********* end *********/
  66. System.out.println("----------------");
  67. }
  68. }
  69. // 说英语接口 声明抽象方法speak()
  70. interface SpeakEnglish {
  71. /********* begin *********/
  72. void speak();
  73. /********* end *********/
  74. }
  75. // 定义人的抽象类Person 封装name和age
  76. // 无参构造函数
  77. // 有参构造函数初始化name和age
  78. // 定义具体方法sleep() 输出'人都是要睡觉的'
  79. // 抽象方法eat()(吃的不一样)
  80. abstract class Person {
  81. /********* begin *********/
  82. private String name;
  83. private int age;
  84. public String getname(){
  85. return name;
  86. }
  87. public void setname(String name){
  88. this.name=name;
  89. }
  90. public int getage(){
  91. return age;
  92. }
  93. public void setage(int age){
  94. this.age=age;
  95. }
  96. public Person(String name,int age){
  97. this.name=name;
  98. this.age=age;
  99. }
  100. public void sleep(){
  101. System.out.println("人都是要睡觉的");
  102. }
  103. abstract void eat();
  104. /********* end *********/
  105. }
  106. // 定义运动员Player(抽象类)继承自Person类
  107. // 无参构造函数
  108. // 有参构造函数初始化name和age
  109. // 运动员学习内容不一样,抽取为抽象 定义抽象方法study()
  110. abstract class Player extends Person {
  111. /********* begin *********/
  112. public Player(String name,int age){
  113. super(name,age);
  114. name=super.getname();
  115. age=super.getage();
  116. }
  117. abstract void study();
  118. /********* end *********/
  119. }
  120. // 定义教练Coach(抽象类)继承自Person类
  121. // 无参构造函数
  122. // 有参构造函数初始化name和age
  123. // 教练教的不一样 定义抽象方法teach()
  124. abstract class Coach extends Person {
  125. /********* begin *********/
  126. public Coach(String name,int age){
  127. super(name,age);
  128. name=super.getname();
  129. age=super.getage();
  130. }
  131. abstract void teach();
  132. /********* end *********/
  133. }
  134. // 定义乒乓球运动员具体类PingPangPlayer 继承自Player类并实现SpeakEnglish类(兵乓球运动员需要说英语)
  135. // 无参构造函数
  136. // 有参构造函数初始化name和age
  137. // 实现自己的eat()方法 输出'乒乓球运动员吃大白菜,喝小米粥'
  138. // 实现自己的study()方法 输出'乒乓球运动员学习如何发球和接球'
  139. // 实现自己的speak()方法 输出'乒乓球运动员说英语'
  140. class PingPangPlayer extends Player implements SpeakEnglish {
  141. /********* begin *********/
  142. public PingPangPlayer(String name,int age){
  143. super(name,age);
  144. name=super.getname();
  145. age=super.getage();
  146. }
  147. public void eat(){
  148. System.out.println("乒乓球运动员吃大白菜,喝小米粥");
  149. }
  150. public void study(){
  151. System.out.println("乒乓球运动员学习如何发球和接球");
  152. }
  153. public void speak(){
  154. System.out.println("乒乓球运动员说英语");
  155. }
  156. /********* end *********/
  157. }
  158. // 定义篮球运动员具体类BasketballPlayer 继承自Player类 不需要继承接口,因为他不需要说英语
  159. // 无参构造函数
  160. // 有参构造函数初始化name和age
  161. // 实现自己的eat()方法 输出'篮球运动员吃牛肉,喝牛奶'
  162. // 实现自己的study()方法 输出'篮球运动员学习如何运球和投篮'
  163. class BasketballPlayer extends Player {
  164. /********* begin *********/
  165. public BasketballPlayer(String name,int age){
  166. super(name,age);
  167. name=super.getname();
  168. age=super.getage();
  169. }
  170. public void eat(){
  171. System.out.println("篮球运动员吃牛肉,喝牛奶");
  172. }
  173. public void study(){
  174. System.out.println("篮球运动员学习如何运球和投篮");
  175. }
  176. /********* end *********/
  177. }
  178. // 定义乒乓球教练具体类 PingPangCoach 继承自Coach类并实现SpeakEnglish类(兵乓球教练需要说英语)
  179. // 无参构造函数
  180. // 有参构造函数初始化name和age
  181. // 实现自己的eat()方法 输出'乒乓球教练吃小白菜,喝大米粥'
  182. // 实现自己的teach()方法 输出'乒乓球教练教如何发球和接球'
  183. // 实现自己的speak()方法 输出'乒乓球教练说英语'
  184. class PingPangCoach extends Coach implements SpeakEnglish {
  185. /********* begin *********/
  186. public PingPangCoach(String name,int age){
  187. super(name,age);
  188. name=super.getname();
  189. age=super.getage();
  190. }
  191. public void eat(){
  192. System.out.println("乒乓球教练吃小白菜,喝大米粥");
  193. }
  194. public void teach(){
  195. System.out.println("乒乓球教练教如何发球和接球");
  196. }
  197. public void speak(){
  198. System.out.println("乒乓球教练说英语");
  199. }
  200. /********* end *********/
  201. }
  202. // 定义篮球教练具体类BasketballCoach 继承自Coach类 不需要继承接口,因为他不需要说英语
  203. // 无参构造函数
  204. // 有参构造函数初始化name和age
  205. // 实现自己的eat()方法 输出'篮球教练吃羊肉,喝羊奶'
  206. // 实现自己的teach()方法 输出'篮球教练教如何运球和投篮'
  207. class BasketballCoach extends Coach {
  208. /********* begin *********/
  209. public BasketballCoach(String name,int age){
  210. super(name,age);
  211. name=super.getname();
  212. age=super.getage();
  213. }
  214. public void eat(){
  215. System.out.println("篮球教练吃羊肉,喝羊奶");
  216. }
  217. public void teach(){
  218. System.out.println("篮球教练教如何运球和投篮");
  219. }
  220. /********* end *********/
  221. }

Java面向对象 - 封装、继承和多态

什么是封装,如何使用封装

  1. package case1;
  2. public class TestPersonDemo {
  3. public static void main(String[] args) {
  4. /********* begin *********/
  5. // 声明并实例化一Person对象p
  6. Person p = new Person();
  7. // 给p中的属性赋值
  8. p.setName("张三");
  9. p.setAge(18);
  10. // 调用Person类中的talk()方法
  11. p.talk();
  12. /********* end *********/
  13. }
  14. }
  15. // 在这里定义Person类
  16. class Person {
  17. /********* begin *********/
  18. private String name;
  19. private int age;
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public int getAge() {
  27. return age;
  28. }
  29. public void setAge(int age) {
  30. this.age = age;
  31. }
  32. void talk() {
  33. System.out.println("我是:" + name + ",今年:" + age + "岁");
  34. }
  35. /********* end *********/
  36. }


什么是继承,怎样使用继承

  1. package case2;
  2. public class extendsTest {
  3. public static void main(String args[]) {
  4. // 实例化一个Cat对象,设置属性name和age,调用voice()和eat()方法,再打印出名字和年龄信息
  5. /********* begin *********/
  6. Cat cat= new Cat();
  7. cat.name="大花猫";
  8. cat.age=6;
  9. cat.voice();
  10. cat.eat();
  11. System.out.println(cat.name+cat.age+"岁");
  12. /********* end *********/
  13. // 实例化一个Dog对象,设置属性name和age,调用voice()和eat()方法,再打印出名字和年龄信息
  14. /********* begin *********/
  15. Dog dog= new Dog();
  16. dog.name="大黑狗";
  17. dog.age=8;
  18. dog.voice();
  19. dog.eat();
  20. System.out.println(dog.name+dog.age+"岁");
  21. /********* end *********/
  22. }
  23. }
  24. class Animal {
  25. /********* begin *********/
  26. protected String name;
  27. protected int age;
  28. public String getName(){
  29. return name;
  30. }
  31. public void setName(String name){
  32. this.name = name;
  33. }
  34. public int getAge(){
  35. return age;
  36. }
  37. public void setAge(int age){
  38. this.age = age ;
  39. }
  40. /********* end *********/
  41. }
  42. class Cat extends Animal {
  43. // 定义Cat类的voice()和eat()方法
  44. /********* begin *********/
  45. public void voice(){
  46. System.out.println(name+"喵喵叫");
  47. }
  48. public void eat(){
  49. System.out.println(name+"吃鱼");
  50. }
  51. /********* end *********/
  52. }
  53. class Dog extends Animal {
  54. // 定义Dog类的voice()和eat()方法
  55. /********* begin *********/
  56. public void voice(){
  57. System.out.println(name+"汪汪叫");
  58. }
  59. public void eat(){
  60. System.out.println(name+"吃骨头");
  61. }
  62. /********* end *********/
  63. }


super关键字的使用

  1. package case3;
  2. public class superTest {
  3. public static void main(String[] args) {
  4. // 实例化一个Student类的对象s,为Student对象s中的school赋值,打印输出信息
  5. /********* begin *********/
  6. Person p= new Person();
  7. p.setName("张三");
  8. p.setAge(18);
  9. p.talk();
  10. Student stu= new Student();
  11. stu.school="哈佛大学";
  12. System.out.println(",学校:"+stu.school);
  13. /********* end *********/
  14. }
  15. }
  16. class Person {
  17. /********* begin *********/
  18. private String name ;
  19. private int age;
  20. public String getName(){
  21. return name;
  22. }
  23. public void setName(String name){
  24. this.name= name;
  25. }
  26. public int getAge(){
  27. return age;
  28. }
  29. public void setAge(int age){
  30. this.age= age;
  31. }
  32. public void talk(){
  33. System.out.print("姓名:"+name+",年龄:"+age);
  34. }
  35. /********* end *********/
  36. }
  37. class Student extends Person {
  38. /********* begin *********/
  39. public String school;
  40. public String getSchool(){
  41. return school;
  42. }
  43. public void setSchool(String name){
  44. this.school= school;
  45. }
  46. /********* end *********/
  47. }


方法的重写与重载

  1. package case4;
  2. public class overridingTest {
  3. public static void main(String[] args) {
  4. // 实例化子类对象s,调用talk()方法打印信息
  5. /********* begin *********/
  6. Student stu=new Student();
  7. stu.talk("张三",18,"哈佛大学");
  8. /********* end *********/
  9. }
  10. }
  11. class Person {
  12. /********* begin *********/
  13. String name;
  14. int age;
  15. protected void talk(String name, int age){
  16. this.name=name;
  17. this.age=age;
  18. System.out.print("我是:"+this.name+",今年:"+this.age);
  19. }
  20. /********* end *********/
  21. }
  22. class Student extends Person {
  23. /********* begin *********/
  24. String school;
  25. public void talk(String name,int age,String school){
  26. super.talk("张三",18);
  27. this.school=school;
  28. System.out.println("岁,我在"+this.school+"上学");
  29. }
  30. /********* end *********/
  31. }


抽象类

  1. package case5;
  2. public class abstractTest {
  3. public static void main(String[] args) {
  4. /********* begin *********/
  5. // 分别实例化Student类与Worker类的对象,并调用各自构造方法初始化类属性。
  6. Student stu=new Student("张三",20,"学生");
  7. Worker wor=new Worker("李四",30,"工人");
  8. // 分别调用各自类中被复写的talk()方法 打印信息。
  9. stu.talk();
  10. wor.talk();
  11. /********* end *********/
  12. }
  13. }
  14. // 声明一个名为Person的抽象类,在Person中声明了三个属性name age occupation和一个抽象方法——talk()。
  15. abstract class Person {
  16. /********* begin *********/
  17. protected String name;
  18. protected int age;
  19. protected String occupation;
  20. Person(String name,int age,String occupation){
  21. this.name=name;
  22. this.age=age;
  23. this.occupation=occupation;
  24. }
  25. abstract void talk();
  26. /********* end *********/
  27. }
  28. // Student类继承自Person类,添加带三个参数的构造方法,复写talk()方法 返回姓名、年龄和职业信息
  29. class Student extends Person {
  30. /********* begin *********/
  31. Student(String name,int age,String occupation) {
  32. super(name,age,occupation);
  33. }
  34. void talk(){
  35. System.out.println("学生——>姓名:"+name+",年龄:"+age+",职业:"+ occupation+"!");
  36. }
  37. /********* end *********/
  38. }
  39. // Worker类继承自Person类,添加带三个参数的构造方法,复写talk()方法 返回姓名、年龄和职业信息
  40. class Worker extends Person {
  41. /********* begin *********/
  42. Worker(String name,int age,String occupation) {
  43. super(name,age,occupation);
  44. }
  45. void talk(){
  46. System.out.println("工人——>姓名:"+name+",年龄:"+age+",职业:"+occupation+"!");
  47. }
  48. /********* end *********/
  49. }


final关键字的理解与使用

  1. package case6;
  2. public class finalTest {
  3. public static void main(String args[]) {
  4. Bike1 obj = new Bike1();
  5. obj.run();
  6. Honda honda = new Honda();
  7. honda.run();
  8. Yamaha yamaha = new Yamaha();
  9. yamaha.run();
  10. }
  11. }
  12. //不可以修改 final 变量的值
  13. // final方法,不可以重写
  14. class Bike1 {
  15. int speedlimit = 90;
  16. void run() {
  17. speedlimit = 120;
  18. System.out.println("speedlimit=120");
  19. }
  20. }
  21. class Bike2 {
  22. void run() {
  23. System.out.println("running");
  24. }
  25. }
  26. class Honda extends Bike2 {
  27. void run() {
  28. System.out.println("running safely with 100kmph");
  29. }
  30. }
  31. class Bike3 {
  32. }
  33. class Yamaha extends Bike3 {
  34. void run() {
  35. System.out.println("running safely with 100kmph");
  36. }
  37. }


接口

  1. package case7;
  2. public class interfaceTest {
  3. public static void main(String[] args) {
  4. // 实例化一Student的对象s,并调用talk()方法,打印信息
  5. /********* begin *********/
  6. Student s =new Student();
  7. s.talk();
  8. /********* end *********/
  9. }
  10. }
  11. // 声明一个Person接口,并在里面声明三个常量:name、age和occupation,并分别赋值,声明一抽象方法talk()
  12. interface Person {
  13. /********* begin *********/
  14. String name="张三";
  15. int age=18;
  16. String occupation="学生";
  17. abstract void talk();
  18. /********* end *********/
  19. }
  20. // Student类继承自Person类 复写talk()方法返回姓名、年龄和职业信息
  21. class Student implements Person {
  22. /********* begin *********/
  23. public void talk(){
  24. System.out.println("学生——>姓名:"+name+",年龄:"+age+",职业:"+occupation+"!");
  25. }
  26. /********* end *********/
  27. }


什么是多态,怎么使用多态

  1. package case8;
  2. public class TestPolymorphism {
  3. public static void main(String[] args) {
  4. // 以多态方式分别实例化子类对象并调用eat()方法
  5. /********* begin *********/
  6. show(new Dog());
  7. show(new Cat());
  8. show(new Lion());
  9. }
  10. public static void show(Animal a){
  11. a.eat();
  12. if(a instanceof Dog){
  13. }else if(a instanceof Cat){
  14. }else{
  15. }
  16. }
  17. /********* end *********/
  18. }
  19. // Animal类中定义eat()方法
  20. abstract class Animal {
  21. /********* begin *********/
  22. abstract void eat();
  23. /********* end *********/
  24. }
  25. // Dog类继承Animal类 复写eat()方法
  26. class Dog extends Animal {
  27. /********* begin *********/
  28. public void eat() {
  29. System.out.println("eating bread...");
  30. }
  31. /********* end *********/
  32. }
  33. // Cat类继承Animal类 复写eat()方法
  34. class Cat extends Animal {
  35. /********* begin *********/
  36. public void eat() {
  37. System.out.println("eating rat...");
  38. }
  39. /********* end *********/
  40. }
  41. // Lion类继承Animal类 复写eat()方法
  42. class Lion extends Animal {
  43. /********* begin *********/
  44. public void eat() {
  45. System.out.println("eating meat...");
  46. }
  47. /********* end *********/
  48. }

Java面向对象 - 类与对象

什么是类,如何创建类

  1. package step1;
  2. public class Test {
  3. public static void main(String[] args) {
  4. /********** Begin **********/
  5. //创建Dog对象
  6. //设置Dog对象的属性
  7. //在main方法中创建一个名为wuhuarou的Dog对象,
  8. //并设置name为五花肉,color为棕色,variety为阿拉斯加。
  9. Dog wuhuarou = new Dog();
  10. wuhuarou.name = "五花肉";
  11. wuhuarou.color = "棕色";
  12. wuhuarou.variety = "阿拉斯加";
  13. //输出小狗的属性
  14. System.out.println("名字:" +wuhuarou.name+ ",毛色:" +wuhuarou.color+ ",品种:" +wuhuarou.variety);
  15. //调用方法
  16. wuhuarou.eat();
  17. wuhuarou.run();
  18. /********** End **********/
  19. }
  20. }
  21. //在这里定义Dog类
  22. /********** Begin **********/
  23. class Dog{
  24. String name;
  25. String color;
  26. String variety;
  27. void eat(){
  28. System.out.println("啃骨头");
  29. }
  30. void run(){
  31. System.out.println("叼着骨头跑");
  32. }
  33. }


构造方法

  1. package step2;
  2. import java.util.Scanner;
  3. public class Test {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String name = sc.next();
  7. String sex = sc.next();
  8. /********** Begin **********/
  9. //分别使用两种构造器来创建Person对象
  10. Person person1 = new Person();
  11. Person person2 = new Person(name,sex);
  12. /********** End **********/
  13. }
  14. }
  15. //创建Person对象,并创建两种构造方法
  16. /********** Begin **********/
  17. class Person{
  18. String name;
  19. String sex;
  20. public Person(){
  21. System.out.println("一个人被创建了");
  22. }
  23. public Person(String name, String sex){
  24. this.name = name;
  25. this.sex = sex;
  26. System.out.println("姓名:"+name+','+"性别:"+sex+','+"被创建了");
  27. }
  28. }
  29. /********** End **********/


选择题(一)        C        CD


This关键字

  1. package step3;
  2. import java.util.Scanner;
  3. public class Test {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String name = sc.next();
  7. int age = sc.nextInt();
  8. String sex = sc.next();
  9. Person p = new Person(name,age,sex);
  10. p.display();
  11. }
  12. }
  13. class Person{
  14. String name = "张三";
  15. int age = 18;
  16. String sex = "男";
  17. /********** Begin **********/
  18. public Person(String name,int age,String sex){
  19. this(age);
  20. this.name = name;
  21. this.sex = sex;
  22. }
  23. public Person(int age){
  24. this.age = age;
  25. }
  26. public void display(){
  27. String name = "baby";
  28. int age = 45;
  29. String sex = "女";
  30. System.out.println("name:" + this.name);
  31. System.out.println("age:" + this.age);
  32. System.out.println("sex:" + this.sex);
  33. }
  34. /********** End **********/
  35. }


类与对象练习

  1. package step5;
  2. public class Test {
  3. /********** Begin **********/
  4. static String name = "楚留香";
  5. static
  6. {
  7. System.out.println("hello educoder");
  8. }
  9. public static void main(String[] args) {
  10. System.out.println("我叫" + name);
  11. study();
  12. }
  13. public static void study(){
  14. System.out.println("我喜欢在educoder上学习java");
  15. }
  16. /********** End **********/
  17. }


static关键字

  1. package step5;
  2. public class Test {
  3. /********** Begin **********/
  4. static String name = "楚留香";
  5. static
  6. {
  7. System.out.println("hello educoder");
  8. }
  9. public static void main(String[] args) {
  10. System.out.println("我叫" + name);
  11. study();
  12. }
  13. public static void study(){
  14. System.out.println("我喜欢在educoder上学习java");
  15. }
  16. /********** End **********/
  17. }


选择题(二)        D        EG        B

Java高级特性 - Java反射

了解 Class 对象

  1. package step1;
  2. /**
  3. * 学员任务文件
  4. */
  5. public class Reflect_stu {
  6. public static void main(String[] args) {
  7. System.out.println("通过Object 类中的 getClass() 获取的 Class 对象为:" + getPersonClass1());
  8. System.out.println("通过静态方法 Class.forName() 获取的 Class 对象为:" + getPersonClass2());
  9. System.out.println("通过类字面常量获取 Class 的对象为:" + getPersonClass3());
  10. }
  11. /**
  12. * 通过 Object 类中的 getClass() 获取的 Class 对象
  13. *
  14. * @return
  15. */
  16. public static Class getPersonClass1() {
  17. /********** Begin *********/
  18. Person person = new Person();
  19. Class c = person.getClass();
  20. return c;
  21. /********** End *********/
  22. }
  23. /**
  24. * 通过静态方法 Class.forName() 获取的 Class 对象
  25. * <p>
  26. * 注意:Person 类的全路径为: step1.Person
  27. *
  28. * @return
  29. */
  30. public static Class getPersonClass2() {
  31. /********** Begin *********/
  32. Class c = null;
  33. String classname = "step1.Person";
  34. try{
  35. c = Class.forName(classname); //一个类的完整路径加名称
  36. }catch(ClassNotFoundException e){
  37. }
  38. return c;
  39. /********** End *********/
  40. }
  41. /**
  42. * 通过类字面常量获取 Class 的对象
  43. *
  44. * @return
  45. */
  46. public static Class getPersonClass3() {
  47. /********** Begin *********/
  48. Class c = Person.class;
  49. return c;
  50. /********** End *********/
  51. }
  52. }


利用反射分析类的能力

  1. package step2;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Method;
  5. import java.lang.reflect.Modifier;
  6. class Apple {
  7. private String name;
  8. public Apple(){}
  9. public Apple(String name){}
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. }
  14. public class Reflect_stu {
  15. public static void main(String[] args) {
  16. // 请根据提供的 classPath 获取 step2.Apple 的 Class 对象, 请使用 Class.forName() 方法, 注意捕获异常
  17. // 通关之后,你也可以修改 clasapath 为其他类路径,分析某个类的能力, 例如: java.util.Date
  18. String classPath = "step2.Apple";
  19. Class clazz = null;
  20. /********** Begin *********/
  21. try{
  22. clazz = Class.forName(classPath);
  23. }catch(ClassNotFoundException e){
  24. }
  25. /********** End *********/
  26. printFields(clazz);
  27. printConstructors(clazz);
  28. printMethods(clazz);
  29. }
  30. /**
  31. * 请打印类的每个域,输出格式为:修饰符 类型 变量名;
  32. * @param clazz
  33. */
  34. public static void printFields(Class clazz) {
  35. /********** Begin *********/
  36. Field[] f = clazz.getDeclaredFields();
  37. for(Field ff:f){
  38. Class type = ff.getType();
  39. int mod = ff.getModifiers();
  40. System.out.print(Modifier.toString(mod)+" ");
  41. System.out.print(type.getName()+" ");
  42. System.out.println(ff.getName()+";");
  43. }
  44. /********** End *********/
  45. }
  46. /**
  47. * 打印构造函数,输出格式为:修饰符 方法名称(参数)
  48. * @param clazz
  49. */
  50. public static void printConstructors(Class clazz) {
  51. Constructor[] constructors = clazz.getDeclaredConstructors();
  52. for (Constructor constructor : constructors) {
  53. Class[] paramTypes = constructor.getParameterTypes();
  54. /********** Begin *********/
  55. String name = constructor.getName();
  56. String modifiers = Modifier.toString(constructor.getModifiers());
  57. if (modifiers.length() > 0) {
  58. System.out.print(modifiers + " ");
  59. }
  60. System.out.print(name + "(");
  61. /********** End *********/
  62. printParamTypes(paramTypes);
  63. }
  64. }
  65. /**
  66. * 请针对每个方法打印其签名,格式为:修饰符 返回值类型 方法名称(参数);
  67. * @param clazz
  68. */
  69. public static void printMethods(Class clazz) {
  70. Method[] methos = clazz.getDeclaredMethods();
  71. for (Method method : methos) {
  72. Class[] paramTypes = null;
  73. /********** Begin *********/
  74. String name = method.getName();
  75. Class returnType = method.getReturnType();
  76. String modifiers = Modifier.toString(method.getModifiers());
  77. System.out.print(modifiers+" "+returnType.getName() + " " + name + "(");
  78. paramTypes = method.getParameterTypes();
  79. /********** End *********/
  80. printParamTypes(paramTypes);
  81. }
  82. }
  83. /**
  84. * 打印方法参数
  85. * @param paramTypes
  86. */
  87. private static void printParamTypes(Class[] paramTypes) {
  88. for (int j = 0; j < paramTypes.length; ++j) {
  89. if (j > 0) {
  90. System.out.print(",");
  91. }
  92. System.out.print(paramTypes[j].getName());
  93. }
  94. System.out.println(");");
  95. }
  96. }


在运行时使用反射分析对象

  1. package step3;
  2. import java.lang.reflect.AccessibleObject;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Modifier;
  5. public class Reflect_stu {
  6. public static String toString(Object obj) {
  7. Class cl = obj.getClass();
  8. String r = "";
  9. r += "[";
  10. // 请获取所有 Field 并设置访问权限为 true
  11. /********** Begin *********/
  12. Field[] fields = cl.getDeclaredFields();
  13. AccessibleObject.setAccessible(fields, true);
  14. /********** End *********/
  15. for (Field f : fields) {
  16. // 此处 if,逻辑为判断 Field 域是否为非静态域
  17. if (!Modifier.isStatic(f.getModifiers())) {
  18. if (!r.endsWith("[")) r += ",";
  19. r += f.getName() + "=";
  20. try {
  21. // 请获取域的类型及值
  22. /********** Begin *********/
  23. Class t = f.getType();
  24. Object val = f.get(obj);
  25. /********** End *********/
  26. // isPrimitive() 用于判断是否为基本数据类型,若为基础数据类型直接拼接,否则递归调用 toString 方法
  27. if (t.isPrimitive()) r += val;
  28. else r += toString(val);
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34. r += "]";
  35. return r;
  36. }
  37. public static void main(String[] args) {
  38. Person person = new Person(88, 19, 175);
  39. System.out.println(toString(person));
  40. }
  41. }
  42. class Person {
  43. public Integer weight;
  44. private Integer age;
  45. private Double height;
  46. public Person(Integer weight, Integer age, double height) {
  47. this.weight = weight;
  48. this.age = age;
  49. this.height = height;
  50. }
  51. }


利用反射进行方法调用

  1. package step4;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. public class Reflect_stu {
  6. public static void main(String[] args) throws InvocationTargetException {
  7. //使用反射调用
  8. Class clazz = null;
  9. try {
  10. clazz = Class.forName("step4.Apple");
  11. /********** Begin *********/
  12. Method setPriceMethod = clazz.getMethod("setPrice", double.class);
  13. Constructor appleConstructor = clazz.getConstructor();
  14. Object apple = appleConstructor.newInstance();
  15. setPriceMethod.invoke(apple, 14);
  16. Method getPriceMethod = clazz.getMethod("getPrice");
  17. System.out.println(getPriceMethod.invoke(apple));
  18. Method getTotal = clazz.getMethod("getTotal", double.class, int.class);
  19. System.out.println(getTotal.invoke(apple, 20, 24));
  20. /********** End *********/
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }
  26. class Apple {
  27. private double price;
  28. private int count;
  29. public Apple() {
  30. }
  31. public double getPrice() {
  32. return price;
  33. }
  34. public void setPrice(double price) {
  35. this.price = price;
  36. }
  37. public int getCount() {
  38. return count;
  39. }
  40. public void setCount(int count) {
  41. this.count = count;
  42. }
  43. public double getTotal(double price, int count) {
  44. return price * count;
  45. }
  46. }

如果此文章对你有帮助,麻烦点个赞哦~~~

点个关注,追新不迷路~,下一篇——Java面向对象之常用类

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/576450
推荐阅读
相关标签
  

闽ICP备14008679号