黑马程序员技术交流社区

标题: 关于封装,private关键字问题! [打印本页]

作者: hushun135    时间: 2015-9-16 22:39
标题: 关于封装,private关键字问题!
  1. /*
  2.         猫狗案例
  3.                 具体事物:猫,狗
  4.                 共性:姓名,年龄,吃饭

  5.         分析:从具体到抽象
  6.                 猫:
  7.                         成员变量:姓名,年龄
  8.                         构造方法:无参,带参
  9.                         成员方法:吃饭(猫吃鱼)
  10.                        
  11.                 狗:
  12.                         成员变量:姓名,年龄
  13.                         构造方法:无参,带参
  14.                         成员方法:吃饭(狗吃肉)
  15.                        
  16.                 因为有共性的内容,所以就提取了一个父类。动物。
  17.                 但是又由于吃饭的内容不一样,所以吃饭的方法是抽象的,
  18.                 而方法是抽象的类,类就必须定义为抽象类。
  19.                
  20.                 抽象动物类:
  21.                         成员变量:姓名,年龄
  22.                         构造方法:无参,带参
  23.                         成员方法:吃饭();
  24.        
  25.         实现:从抽象到具体
  26.                 动物类:
  27.                         成员变量:姓名,年龄
  28.                         构造方法:无参,带参
  29.                         成员方法:吃饭();
  30.                        
  31.                 狗类:
  32.                         继承自动物类
  33.                         重写吃饭();
  34.                        
  35.                 猫类:
  36.                         继承自动物类
  37.                         重写吃饭();
  38. */
  39. //定义抽象的动物类
  40. abstract class Animal {
  41.         //姓名
  42.         private String name;
  43.         //年龄
  44.         private int age;
  45.        
  46.         public Animal() {}
  47.        
  48.         public Animal(String name,int age) {
  49.                 this.name = name;
  50.                 this.age = age;
  51.         }
  52.        
  53.         public String getName() {
  54.                 return name;
  55.         }
  56.        
  57.         public void setName(String name) {
  58.                 this.name = name;
  59.         }
  60.        
  61.         public int getAge() {
  62.                 return age;
  63.         }
  64.        
  65.         public void setAge(int age) {
  66.                 this.age = age;
  67.         }
  68.        
  69.         //定义一个抽象方法
  70.         public abstract void eat();
  71. }

  72. //定义具体的狗类
  73. class Dog extends Animal {
  74.         public Dog() {}
  75.        
  76.         public Dog(String name,int age) {
  77.                 super(name,age);
  78.         }
  79.        
  80.         public void eat() {
  81.                 System.out.println("狗吃肉");
  82.         }
  83. }

  84. //定义具体的猫类
  85. class Cat extends Animal {
  86.         public Cat() {}
  87.        
  88.         public Cat(String name,int age) {
  89.                 super(name,age);
  90.         }
  91.        
  92.         public void eat() {
  93.                 System.out.println("猫吃鱼");
  94.         }
  95. }

  96. //测试类
  97. class AbstractTest {
  98.         public static void main(String[] args) {
  99.                 //测试狗类
  100.                 //具体类用法
  101.                 //方式1:
  102.                 Dog d = new Dog();
  103.                 d.setName("旺财");
  104.                 d.setAge(3);
  105.                 System.out.println(d.getName()+"---"+d.getAge());
  106.                 d.eat();
  107.                 //方式2:
  108.                 Dog d2 = new Dog("旺财",3);
  109.                 System.out.println(d2.getName()+"---"+d2.getAge());
  110.                 d2.eat();
  111.                 System.out.println("---------------------------");
  112.                
  113.                 Animal a = new Dog();
  114.                 a.setName("旺财");
  115.                 a.setAge(3);
  116.                 System.out.println(a.getName()+"---"+a.getAge());
  117.                 a.eat();
  118.                
  119.                 Animal a2 = new Dog("旺财",3);
  120.                 System.out.println(a2.getName()+"---"+a2.getAge());
  121.                 a2.eat();
  122.                
  123.                 //练习:测试猫类
  124.         }
  125. }
复制代码
对于方式2 有调用到下面两个方法吗?
public void setAge(int age)
{
                this.age = age;
}
public void setName(String name) {
                this.name = name;
        }

谢谢解答 不胜感激!




作者: l631356126    时间: 2015-9-16 22:51
把name age 赋值给  public Animal(String name,int age) {
                this.name = name;
                this.age = age;
        }
然后调用getName  和getA 方法
作者: 俏皮雅轩    时间: 2015-9-16 22:59
还没学呢,默默看着
作者: leaf168    时间: 2015-9-17 18:48
Dog d2 = new Dog("旺财",3);是用的有参构造函数初始化的,所以不用setXxx();方法,二回用getXxx();获取值
作者: 大大大卷    时间: 2015-9-17 20:20
当然没有调用啦,你看看你的构造函数
创建对象时是用这个函数给变量赋值的:
  1. public Animal(String name,int age) {
  2.                 this.name = name;
  3.                 this.age = age;
  4.         }
复制代码


建议你再看看老师讲的关于构造函数的内容
作者: 清明月雨上    时间: 2015-9-17 21:23
总结的挺好哒 收藏了 嘿嘿




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2