不知不觉都已经学到继承了,感觉前几天的课幸亏先前预习了不然压力山大啊!
一、继承的特点
Java中,不支持多级继承,但可以多层继承,继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
继承的出现让类与类之间产生了关系,提供了多态的前提。
/*
子类的实例化过程:
1.构造一个子类对象时,会同时构造一个父类对象;注意类可以继承接口,接口不能被实例化。
2.在子类的构造器的第一行,隐式的添加一条语句:super();调用父类无参的构造器;
3.当继承时,一定仔细观察父类的构造函数,如果父类提供了无参构造函数,那么子类可以不显示调用;
当父类没有无参构造函数时,那么子类必须显示使用super(参数),指定调用的父类的构造函数;
4.super()调用父类构造器,这个语句必须放在第一句话;
*/
class Student
{
String stuNo;
Student(String name){
//this();//在一个构造器中,不能同时使用this()及super(),因为两个语句都需要放在第一句话;
System.out.println("构造一个Student");
}
Student(){
int num=1;
this.show();
}
void show(){
System.out.println("zhu");
}
}
class Demo
{
public static void main(String[] args)
{
Student stu = new Student("章子怡");
System.out.println("------------------------");
Student stu2 = new Student();
}
}
子类的实例化过程:
1.构造一个子类对象时,会同时构造一个父类对象;注意类可以继承接口,接口不能被实例化。
2.在子类的构造器的第一行,隐式的添加一条语句:super();调用父类无参的构造器;
3.当继承时,一定仔细观察父类的构造函数,如果父类提供了无参构造函数,那么子类可以不显示调用;
当父类没有无参构造函数时,那么子类必须显示使用super(参数),指定调用的父类的构造函数;
4.super()调用父类构造器,这个语句必须放在第一句话;
*/
class Student
{
String stuNo;
Student(String name){
//this();//在一个构造器中,不能同时使用this()及super(),因为两个语句都需要放在第一句话;
System.out.println("构造一个Student");
}
Student(){
int num=1;
this.show();
}
void show(){
System.out.println("zhu");
}
}
class Demo
{
public static void main(String[] args)
{
Student stu = new Student("章子怡");
System.out.println("------------------------");
Student stu2 = new Student();
}
}
super关键字和this关键字:
this:
1.存储是当前对象的引用;
2.它始终指向的是本对象内部的成员(成员属性、成员方法、构造函数)
super:
1.存储的父类对象的引用;
2.它指向父类对象中的成员(成员属性、成员方法、构造函数)
在子类中可以定义跟父类相同的成员属性,此时,在子类中,这个变量将覆盖
父类的同名变量。可以使用关键字super.变量名显示的去获取父类的被覆盖的同名
变量。
this:
1.存储是当前对象的引用;
2.它始终指向的是本对象内部的成员(成员属性、成员方法、构造函数)
super:
1.存储的父类对象的引用;
2.它指向父类对象中的成员(成员属性、成员方法、构造函数)
在子类中可以定义跟父类相同的成员属性,此时,在子类中,这个变量将覆盖
父类的同名变量。可以使用关键字super.变量名显示的去获取父类的被覆盖的同名
变量。
方法的重写(Override)
1.子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。
一模一样的方法?
1.要求:
1).返回值类型、方法名、参数列表三者必须完全相同;才是重写(Override)
如果:
方法名和参数列表相同,返回值类型不同:编译错误
返回值类型和方法名相同,参数列表不同:编译通过,正常运行。属于子类自有的函数
2).关于访问修饰符:
子类重写父类方法时,必须拥有跟父类访问修饰符相同,或更宽的访问修饰符;
访问修饰符:从宽到窄:public 、 protected、(默认)、private
如果父类的方法的访问修饰符是(默认)的,那么子类中重写的方法必须是:(默认)或protected或public
如果父类的方法的访问修饰符是public的,那么子类中重写的方法必须是:public
1.子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。
一模一样的方法?
1.要求:
1).返回值类型、方法名、参数列表三者必须完全相同;才是重写(Override)
如果:
方法名和参数列表相同,返回值类型不同:编译错误
返回值类型和方法名相同,参数列表不同:编译通过,正常运行。属于子类自有的函数
2).关于访问修饰符:
子类重写父类方法时,必须拥有跟父类访问修饰符相同,或更宽的访问修饰符;
访问修饰符:从宽到窄:public 、 protected、(默认)、private
如果父类的方法的访问修饰符是(默认)的,那么子类中重写的方法必须是:(默认)或protected或public
如果父类的方法的访问修饰符是public的,那么子类中重写的方法必须是:public
final关键字:
1.final可以修饰类,方法,变量。
1).被final修饰的类,表示:最终类,不能被继承;
2).被final修饰的方法,表示:最终方法,不能被"重写";
3).被final修饰的变量,表示:拥有最终的值;
A.被final修饰的“普通变量”:允许先声明,后赋值,但只能在构造方法(初始化代码块)中赋值,而且只能被赋值一次;
B.被final修饰的"静态变量",可以通过静态代码块赋值;或者必须在声明时赋值;否则不能通过编译;
1.final可以修饰类,方法,变量。
1).被final修饰的类,表示:最终类,不能被继承;
2).被final修饰的方法,表示:最终方法,不能被"重写";
3).被final修饰的变量,表示:拥有最终的值;
A.被final修饰的“普通变量”:允许先声明,后赋值,但只能在构造方法(初始化代码块)中赋值,而且只能被赋值一次;
B.被final修饰的"静态变量",可以通过静态代码块赋值;或者必须在声明时赋值;否则不能通过编译;
总结了这么多,感觉听的时候还行,不过过后就忘,需要理解加记忆的东西很多。。加油吧