继承的定义与使用
继承的主要作用在于在已有基础上进行功能扩展,强调代码的可重用性。
要使用继承,必须满足“is-a”原则:Student is a Person
继承使用:子类使用extends关键字继承父类,无需重复编写代码的情况下拥有夫类的所有成员。子类拥有比父类更多的属性。
父类又称超类(super class)或基类。子类也称派生类;
class A{
static{
System.out.println("1.A类的静态块");
}
{
System.out.println("2.A类的构造块");
}
public A(){
System.out.println("3.A类的构造方法");
}
}
public class B extends A{
static{
System.out.println("4.B类的静态块");
}
{
System.out.println("5.B类的构造块");
}
public B(){
System.out.println("6.B类的构造方法");
}
public static void main(String[] args){
System.out.println("------start------");
new A();
new B();
System.out.println("------end------");
}
}
发生继承关系后,子类可以直接继承父类的操作,可以实现代码的重用。
继承的主要作用是对类进行扩充以及代码的重用。
1.子类对象 在进行实例化前一定会首先实例化父类对象。默认调用父类的构造方法后再调用子类的构造方法,进行子类对象初始化。
2.java只允许单继承,不允许多继承:一个类只能继承一个父类。
虽然不允许多继承,但是可以使用多层继承
3.在进行继承的时候,子类会继承父类的所有结构(包括私有属域)
**隐式继承:**继承父类的所有私有域(包含私有属性、方法 ),无法直接使用
**显示继承:**继承父类所哟属性,可以直接调用
方法覆写
发生在有继承关系的类之间,子类定义了与父类相同的方法、方法名称、参数个数、返回值类型都相同。
class Person{
public void print(){
System.out.println("1.[Person]类的print方法");
}
}
class Student extends Person{
public void print(){
System.out.println("2.[Student]类的Print方法");
}
}
public class Text1{
public static void main(String[] args){
new Student().print();
}
}
注意两点(存在方法覆写时到底调用的是哪一个类的同名方法):
1.你当前使用的对象使用那个类new的;
2.当调用某个方法,如果该方法已经别被子类所覆盖,那么调用的一定是被覆写过的方法。
3,进行方法覆写时,被覆写不能够拥有比父类更为严格的访问控制权限。
访问权限
public(公共访问权限)>default(包访问权限)>private (仅限本类访问)
1.如果父类使用public进行方法声明,那么子类必须也使用public;
2.如果父类使用default,那么子类可以使用default或public;
3.方法覆写不能出现private权限
class Person{
public void fun(){
this.print();
}
private void print(){//用private修饰,此方法仅限父类使用,子类无法得知此方法存在
System.out.println("1.[Person]类的print方法");
}
}
class Student extends Person{
public void print(){//此时该方法是类定义的新方法,与父类方法无关
System.out.println("1.[Student]类的print方法");
}
}
public class Text2{
public static void main(String[] args){
new Student().fun();
}
}
//运行结果为:1.[Person]类的print方法;