Java_继承

什么是继承?

Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立父子关系。

继承的特点

1.子类能继承父类的非私有成员(成员变量、成员方法)。

2.继承后对象的创建子类的对象是由子类、父类共同完成的。


public class A {
           //公开成员
            public int i;
            public void print(){
            System.out.println("====print====");
            }
            //私有成员
            private int j;
            private void print2()
            {
                       System.out.println("+++print+++");
            }

}


public class B extends A{
///子类可以继承父类的私有成员
     public void print3()
     {   ///
          System.out.println(i);
          print1();

           //报错System.out.println(j);
           //报错print2
     }
}


public class Test{
    public static void main (String []args)
    {
        //目标:认识继承,掌握继承的特点
        B  b= new b();
        System.out.println(b.i);
        //System.out.print(b.j); 报错
        //System.out.print(b.k); 报错
        b.print();
        //b.print2();  报错
        b.print3();
    }
}



继承的执行原理

在这里插入图片描述

带继承关系的类,Java会怎样创建它的对象?对象创建出来以后,可以直接访问那些成员?

带继承关系的类,java会用类和其父类,这多张设计图来一起创建类的对象。
对象能直接访问什么成员,是由子父类这张设计图共同决定的,这张设计图对外暴露了什么成员,对象就可以访问什么成员。

使用继承有什么好处

减少重复代码
可以将重复代码放到父类去

//父类
public class People {
     private String name;
     public  String getname();
     {
      return skill;
     }

}

//子类
public class Teacher extends
{    
     private int skill;

     public void setSkill(String skill)
     {
        this.skill = skill;
     }
     public void printinfo()
     {
         System.out.println(getName()+"具备的技能"+skill());
     }
     
}


继承相关的注意事项

1.权限的修饰
就是用来限制类中的成员 (成员变量、成员方法、构造器、代码块…) 能够被访问的范围。

权限修饰符有几种?各自的作用是什么?

修饰符在本类中同一个包下的其它类里任意包下的子类里任意包下的任意类里
private
缺省
protected
public

private<缺省<protected<public

2.Object 单继承、Object类

Java 是单继承的,Java中的类不支持多继承,但是支持多层继承。


         public class Test()
         {   
           public static void main()
           {
              //目标:掌握继承的两个注意事项。
              //1. java 是单继承的,一个类只能继承一个直接父类,Java中的类不支持多继承,但是支持多层继承。
              //2.Object 类是Java中所有类的祖宗。
           
         }
}

class A()
{
   
}
class B extends A {
}
//class C extendsB ,A{}//报错

class D extends B{
}


3.Object 类是Java中所有类的祖宗

什么是方法重写

当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称,参数列表一样的方法,去覆盖父类这个方法,这就是方法重写。
注意:重写后,方法的访问,Java会遵循就近原则。

1.方法重写的其它注意事项

重写技巧 :使用Override 注解,他可以指定java编译器,检查我们的方法重写格式是否正确,代码可读性也会更好。

子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public > protected > 缺省)。

重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。

私有方法,静态方法不能被重写,如果重写会报错。

子类写了一个方法名称,形参列表与父类某个方法一样的方法去覆盖父类方法。

2.方法重写的应用场景
当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法重写。

子类中访问其它成员的特点

1、在子类中访问其它成员(成员变量、成员方法),是依照就近原则的。
先子类局部范围找
然后子类成员范围找
然后父类成员范围找,如果父类范围还没有找到则报错。

public class F{
  public void print()
  {
    System.out.print("==父类的print方法执行==");
  }
}


public class Z extends F {
    String name = "子类名称";

  public void showname()
  {
    String name = "局部名称";
    System.out.println(name);//局部名称
    System.out.println(this.name);//子类成员名称
    System.out.println(super.name);//父类中的成员变量
    
  }
  @Override 
  public void print1()
  {
    System.out.println("==子类的方法执行了==");
  }
  public void showMethod()
  {   
      print1();//子类的
      super.print1();//父类的
  }
}




2.如果子父类中,出现了重名的成员,会优先使用子类的,如果此时一定要在子类中使用父类的怎么办?

可以通过super 关键字,指定访问父类的成员:super.父类成员/父类成员方法

子类构造器的特点

   子类的全部构造器,都会先调用父类的构造器,在执行自己。
   class F
   {
       public F()
       {
          System.out.println("===父类f的 无参数构造器 执行了 ===");
       }
   }
   class Z extends F
   {
        public Z(){
        System.out.println("==子类Z的 无参数构造器 执行了===");
        }
   }
    

   public class Test()
   {
       public static void main(String []args){
         //mu
       
       }
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值