------- android培训、java培训、期待与您交流! ----------
继承的好处:
继承的出现,提高了代码的复用性。
继承的出现,让类与类之间产生了关系,extends来表示,这个关系的出现,就有了面向对象的第三个特点多态。
继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构。
要了解这个体系结构中最共性的内容,就看最顶层的类。
要使用这个体系的功能,就用最底层的类创建对象。
特点
java只支持单继承,多继承容易带来安全隐患:当多个父类中存在相同方法,功能内容不同时,子类不确定运行哪一个。
java支持多重(层)继承。
注意:
1:子类可以直接访问父类中的非私有的属性和行为。
2:不要仅为了获取其他类中部分功能而去继承。类与类之间要有所属( " is a " )关系,xx是xx的一种。 A如果继承B,那么就可以说A是B的一种。
继承后子父类之间成员的关系:
1、变量
class Fu
{
int num1 = 5;
}
class Zi extends Fu
{
int num1 = 20;
}
public void show()
{
int num1 = 30;
System.out.println("num1="+num1);
//当局部变量和成员变量重名的时候用this来区分
System.out.println("this num1="+this.num1);
//当子类和父类出现了同名变量,用super来区分
System.out.println("father num1="+super.num1);
}
在一个类中如果方法中的局部变量和方法外的成员变量重名,那么如果在方法内输出这变量,就是方法自己的变量里的值。想要区分要用this,加上this.就是输出成员变量的值。加上super.就是输出父类里变量的值
this和super的区别:
this代表本类对象的引用
super本类对象父类的引用
this可以用于区分局部变量和成员变量同名的情况
super可以用于区分子类和父类成员变量同名的情况
2、成员方法
子类中存在和父类成员方法同名的这种现象,叫做重写,复写,覆盖。
注意:
1,子类覆盖父类,必须保证子类权限大于等于父类权限才可以覆盖,否则编译失败
2,静态只能覆盖静态
重写和重载的区别:重载的特点: 在同一类中。 方法名相同,参数列表不同。重写的特点: 在子父类中 ,要有继承关系。 方法的声明相同。(方法名和参数列表都相同)
在对子类对象进行初始化时,父类的构造函数也会运行。
子类的所有构造函数第一行有一条隐式语句:super();
子类一定要访问父类中的构造函数,因为父类的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问父类的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定
注意:super语句一定定义在子类构造函数的第一行
子类的实例化过程
结论:子类所有的构造函数默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句隐式super()
final
作为一个修饰符 可以修饰类、函数、变量。
1,被fainl修饰的类不能被继承。
2,被final修饰的成员方法不能被重写。
3,final可以用来修饰变量:被final修饰的变量为常量,值不能被修改。
常量的命名规范:要求大写。 final int PI = 3.14;
4,内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。