继承

 继承

    继承:减少冗余(重复) 如果很多类的属性,方法 重复出现,重复--->父类,继承

 

    严格继承:

            is a是一个

            子类 是一个 父类

         例: dog 是一个pet penguin 是一个pet house 是一个pet (这就不能继承,因为读不通)

         注意:如果一个方法,方法名相同,但方法体不同,也不能提取到父类

                       只有完全相同的属性,方法,能提取到父类

                 如果父类属性定义为private修饰符,只能本类访问

              所以不能直接拿,可以拿get.name的, get.name return下返回,就可以拿到了

         总结: a() this.a() : 当前类a(),如果没 去父类找a();

                     super.a() :直接去父类中找a()

                    this:当前类

                 super:父类

           this/super:构造方法 :this()调用本类构造;super()调用父类构造

       构造方法:

                无惨构造方法:

                          public 类名(){

                                     }

                  如果类中 没有任何构造方法,则系统自动提供一个 无参构造。

                          public Dog(){}

                   如果类中 已经存在了任何构造方法,则系统不再提供无惨构造

          一般建议:如果给类中 编写构造方法,则手动编写一个无惨构造,防止报错

      含参构造的作用:一次性给多个属性赋值

                          作用:1. 实例化(产生对象) Dog dog=new Dog();

                                     2. 一次性给多个属性赋值

                                     3. 互补

                多个构造方法之间 不能循环调用

        如果在构造方法中,通过this(...)/super()调用其他的构造方法,

          则this()必须放在第一行。(两个不能共存)

      子类继承父类时,private,构造方法是不能被继承的。但是 子类可以显示的调用父类构造super dog-->pet

 

package pet;

public class Dog extends Pet
{
   //真正无返回值
//   public Dog()
//   {
//       System.out.println("dog的构造方法....");
//   }
   private String strain;
   private String other;

//通过两个方法才能赋两个值 ,但构造方法可以一次性赋多个值
   public Dog(String strain,String other)
  {
       //this(); 死循环
       System.out.println("2个参数的构造方法:"+strain+"\t"+other);
       this.strain=strain;
       this.other=other;
  }
   public Dog(String strain)
  {
       this("a","b");
       System.out.println("1个参数的构造方法");
       this.strain=strain;
  }
   //0-->1-->2 2-->0(会死循环,所以可以删一个调用)
   /*
   结果为:
   2个参数的构造方法:a b
   1个参数的构造方法
    无惨构造
    */
  public Dog()
  {
      // super();//调用父类无惨构造
       super("a",2,1);
       //this("a");
       System.out.println("子类无惨构造");

       //构造方法 不能通过方法名 直接调 Dog dog=new Dog();
       //非构造方法(普通方法) 通过方法名 直接调
       //构造方法直接 可以相互调用,this
       //Dog("abc");错误的
     
       setStrain("abc");
  }

   public String getStrain() {
       return strain;
  }
   //子类重写父类的方法:父类中已经存在了a(),子类又重写了一个a()
   public void a()
  {
       System.out.println("子类Dog......");
  }

   //无返回值,返回值为空
   //访问修饰符 返回值类型 方法名(参数列表){方法体}
   public void setStrain(String strain) {
       this.strain = strain;
  }
   public void print()
  {
       System.out.println("print..");
       System.out.println(getName()+"\n"+getHealth()+"\t"+getLove()+"\n"+this.strain+"\n"+this.other);
//       //a():先在当前类中a(),如果有则直接使用;如果没有,去父类中寻找
//       a();
//       this.a(); //先在当前类里面找,如果没有,在去父类中寻找
//       //如果只想调父亲的:super
//       super.a(); //跨过子类,直接去父类里面找a();
  }
}
package pet;

public class Penguin extends Pet
{
   private String strain;
   private boolean sex;

   public String getStrain() {
       return strain;
  }

   public void setStrain(String strain) {
       this.strain = strain;
  }

   public boolean getSex() {
       return sex;
  }

   public void setSex(boolean sex) {
       this.sex = sex;
  }
   public void print()
  {
       System.out.print(getName()+"\n"+getStrain()+"\t"+getLove()+"\n"+this.sex);
  }
}
package pet;

public class Pet
{
   private String name;
   private int health;
   private  int love;
   public Pet()
  {
       System.out.println("父类无惨构造...");
  }

   public Pet(String name, int health, int love)
  {
       System.out.println("父类3个参数的构造方法");
       this.name = name;
       this.health = health;
       this.love = love;
  }

   public void a()
  {
       System.out.println("父类 pet....");
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public int getHealth() {
       return health;
  }

   public void setHealth(int health) {
       this.health = health;
  }

   public int getLove() {
       return love;
  }

   public void setLove(int love) {
       this.love = love;
  }
}
package pet;

import java.util.Date;

public class TestPet
{
   public static void main(String[] args)
  {

      // Dog dog=new Dog(); //print..
       //Dog dog=new Dog("哈士奇","other123...");
         //dog.setHealth(98);               //互补 构造方法赋一半,set赋一半

//       dog.setName("wc");
//       dog.setLove(99);
//       dog.setHealth(98);
//       dog.setStrain("哈士奇");
      //dog.print();
       Dog dog=new Dog();

  }
}
 
posted @ 2022-09-22 15:41  zjw_rp  阅读(125)  评论(0)    收藏  举报