继承:查阅父类功能,创建子类对象使用功能。
聚集:has a
聚合:
组合:
子类要访问本类中的变量,要用this
子类要访问父类中的同名变量,用super
super的使用和this的使用几乎一致
this代表的是本类对象的引用
super代表的是父类对象的引用
----------------------------------------------------------------------------------------
但是子类岁具备了该功能,但是功能的内容却和父类不一致。
这时,没有必要定义新功能,而是使用覆盖特殊,保留父类的功能定义,并重写功能内容。
super();就是代表的
class fu{
fu(){
System.out.println("fu fun"); }
}
中的
fun(){
System.out.println("fu fun");
聚集:has a
聚合:
组合:
----------------------------------------------------------------------------------------
子父类中的变量的特点:
如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,要用this
子类要访问父类中的同名变量,用super
super的使用和this的使用几乎一致
this代表的是本类对象的引用
super代表的是父类对象的引用
----------------------------------------------------------------------------------------
子父类中函数的特点-覆盖:
package asa;
/*
* 子类已经拿到了父类中的内容,
* class fu{
void show1(){
System.out.println("fu show");
}
}
class zi extends fu{
void show2(){
System.out.println("zi show");
}
}
public class aaaa {
public static void main(String [] args)
{
zi z=new zi();
z.show1();
z.show2();
}
}
*
*/
/*
* 当子类出现和父类一模一样的函数时,
* 当子类对象调用该函数,会运行子类函数的内容
* 如同父类的函数被覆盖一样
*
*这种情况是函数的另一个特性,重写(覆盖)。
* class fu{
void show(){
System.out.println("fu show");
}
}
class zi extends fu{
void show(){
System.out.println("zi show");
}
}
public class aaaa {
public static void main(String [] args)
{
zi z=new zi();
z.show();
}
}
//控制台输出结果:
* zi show
*/
当子类继承父类,沿袭了父类的功能,到子类中,
但是子类岁具备了该功能,但是功能的内容却和父类不一致。
这时,没有必要定义新功能,而是使用覆盖特殊,保留父类的功能定义,并重写功能内容。
-------------------------------------------------------------------------------------------------------------------------------------------
package asa;
/*
* 子父类中的构造函数
* 覆盖要一模一样,子父类中的构造函数是不一样的。
*
*/
class fu{
fu(){
System.out.println("fu fun");
}
}
class zi extends fu{
zi(){
//super();
System.out.println("zi fun");
}
}
public class aaaa {
public static void main(String [] args)
{
zi z=new zi();
}
}
/*控制台输出结果是:
* fu fun
* zi fun
* 由此可见,编译不仅走了子类,还走了父类。而且还是先走的父类。
* 其实是子类的构造函数,第一行有一条隐式的语句:super();
* 如果出现子父类后,想子类使用父类中中的构造函数时,用super();调用父类构造函数
* this();用于调用本类中的构造函数。
*
*/
子父类中构造函数的特点-子类实例化过程:
父类中的构造函数
在对子类对象进行初始化时,父类的构造函数也会进行
那是因为子类的构造函数默认第一行有一条隐式的语句super();
super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
package asa;
class fu{
fu(){
System.out.println("fu fun");
}
}
class zi extends fu{
zi()
{
System.out.println("zi fun");
}
zi (int x)
{
System.out.println("zi...."+x);
}
}
public class aaaa {
public static void main(String [] args)
{
zi z=new zi();
zi z1=new zi(4);
}
}
/*
*控制台输出结果:
* fu fun
zi fun
fu fun
zi....4
*/
package asa;
class fu{
fu(){
System.out.println("fu fun");
}
}
class zi extends fu{
zi()
{
super();
System.out.println("zi fun");
}
zi (int x)
{
super();
System.out.println("zi...."+x);
}
}
public class aaaa {
public static void main(String [] args)
{
zi z=new zi();
zi z1=new zi(4);
}
}
/*
*控制台输出结果:
* fu fun
zi fun
fu fun
zi....4
*/
super();就是代表的
class fu{
fu(){
System.out.println("fu fun"); }
}
中的
fun(){
System.out.println("fu fun");
}