• 9.继承


    基于某个父类的扩展,制定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法
    例如:平行四边形是四边形,可以说平行四边形类继承了四边形类,这时平行四边形类将所有四边形具有的属性和方法都保留下来,并基于四边形类扩展了一些新的四边形类特有的属性和方法。
    父类:Test      构造方法
                            成员方法         protected void doSomething()                   
                                                    protected Test doIt()
    子类:Test2()   构造方法
                           成员方法            public void doSomethingnew()
                                                      public void dosomething()
                                                      protected  Test2 doIt()
    Class test{
    public Test(){ }                                     //父类构造方法
    protected void doSomething(){}    //成员方法
    protected Test doIt(){  return new doIt();  } }  //返回值为Test类型的方法
     
    class test2 extends test{    //继承父类
    public Test2(){                     //构造方法
    super();                                 //调用父类构造方法
    super.doSomething();           //调用父类成员方法
    }
    public void doSomethingnew(){  } //新增方法
    public void doSomething(){  }      //重写父类方法
    protected Test2 doIt(){return new Test2();  //重写父类方法,方法返回值类型为Test2类型
    }
    }
    在子类中可以连同初始化父类构造方法来完成子类初始化操作,既可以在子类的构造方法中使用super语句调用父类的构造方法,也可以在子类中使用super关键字调用父类的成员方法等。
    但是子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为Public或protected的成员方法
    继承并不是扩展父类的功能,还可以重写父类的成员方法。重写(覆盖)就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限修改为public。
     
    在继承中还有一种特殊的重写方式,子类与父类的成员方法返回值,方法名称,参数类型及个数完全相同,唯一不同的是方法实现内容,将这种重写方式被称为重构。
    当重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变,例如,父类中的doSomething()方法的修饰权限为protected,继承后子类中的方法doSomething()修饰权限只能修改为public,不能修改为private.
    private(本类)----protected(同包其他类和该类的子类)----public(其他包和子类)
    子类重写父类的方法还可以修改方法的返回值类型,但有个原则,重写返回值类型必须是父类中同一方法返回值类型的子类,而Test2类正是Test的子类,当实例化子类对象时,父类对象也相应实例化。换句话说,在实例化子类对象,java编译器会在子类的构造方法中自动调用父类的无参构造方法。
    class Parent{
    Parent(){
    System.out.println("调用父类的Parent()构造生活");
    }
            }
           
    class SubParent extends Parent{
    SubParent(){
    System.out.println("调用子类的subParent()构造生活");
    }
     
    }
     
    public class demo extends SubParent{
    demo(){
    System.out.println("调用子类的Subroutine()构造生活");
    }
    public static void main(String[] args){
    demo s=new demo();
    }
    }
    实例化子类对象时,会先调用父类的构造方法,首先是顶级父类,然后是上一级父类,最后是子类,也就是说,实例化子类对象时首先要实例化父类对象,然后再实例化子类对象,所以在子类构造方法访问父类构造方法之前,父类已经实例化。
     
    1. Private
    如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能在本类中被使用,在子类也是不可见的,并且对其他包的类也是不可见的。
    2. Protected
    只有本包内的该类的子类能够使用
    3. Public
    除了在本类中使用这些数据外,还可以在子类和其他包的类中使用。
     
    访问包位置
     
    类修饰符
     
    Private
    protected
    public
     
     
    本类
    可见
    可见
    可见
     
     
    同包其他类或子类
    不可见
    可见
    可见
     
     
    其他的包类或子类
    不可见
    不可见
    可见
     
     
                                                           
  • 相关阅读:
    光脚丫学LINQ(025):如何验证DBML和外部映射文件
    使用LINQ to SQL将数据从一个数据库复制到另一个数据库
    用VS2010 C#写DLL文件并且调用(原创)
    linux初识
    Run Only One Copy Of Application
    SQL Server 2008开启远程连接
    用Visual C#做DLL文件
    SQL Server代理服务无法启动的处理方法(转载)
    QTP连接Oracle
    What's AJAX?
  • 原文地址:https://www.cnblogs.com/cainame/p/10091988.html
Copyright © 2020-2023  润新知