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
 
 
本类
可见
可见
可见
 
 
同包其他类或子类
不可见
可见
可见
 
 
其他的包类或子类
不可见
不可见
可见
 
 
                                                       
原文地址:https://www.cnblogs.com/cainame/p/10091988.html