面向对象——继承

一、继承概述:

  多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需在定义这些属性和行为,只需要继承那个类即可。

多个类可以称为子类,单独这个类称为父类或者超类,基类等。

子类可以直接访问父类中的非私有的属性和行为。

通过extends关键字让类与类之间产生继承关系。

例如: class B extedns A {  }

继承的好处?

1、提高了代码的复用性。

2、继承的出现让类与类之间产生了关系,提供了多态的前提。

Java中只支持单继承。不直接支持多继承,但是对c++中的多继承提供了改良。

单继承:一个类只能有一个父类。类似于一个儿子只能有一个父亲。

多继承:一个子类可以有多个直接父类(java中不允许,进行改良)

              不直接支持,因为多个父类中有相同成员,会产生调用的不确定性。在Java中是通过“多实现”的方式来体现。

Java支持多层(多重)继承

C继承B,B继承A时,就会出现一个继承体系。

1、查看该体系的顶层类,了解该体系的基本功能。

2、创建体系中的最子类对象,完成功能的使用。

什么时候定义继承呢?

当类与类之间存在着所属关系的时候,就定义继承。xxx是yyy中的一种。xxx extends yyy

所属关系: is a 的关系。

class Demo
{
	void show1(){}
}


class DemoA extends Demo
{
//	void show1(){}
	void show2(){}
}
class DemoB extends Demo
{
//	void show1(){}
	void show3(){}
}

二、子父类中成员变量的特点。

  1、在子父类中,成员的特点体现。

1、成员变量

2、成员函数

3、构造方法

1、成员变量

当本类中的成员和局部变量同名时用this区分

当子父类中的成员变量同名用super关键字区分父类。

this和super的用法很相似。

this :代表一个本类对象的引用。

super: 代表一个父类空间

class Fu
{
	private int num = 4;  //继承中不能定义为private,虽然下面定义了函数可以访问,但实
                              //际开发中不允许此类写法。

	public int getNum()
	{
		return num;
	}
}


class Zi extends Fu
{
	private int num = 5;


	void show()
	{
		System.out.println(this.num+"....."+super.getNum());
	}
}


class ExtendsDemo2 
{
	public static void main(String[] args) 
	{
		Zi z = new Zi();
		z.show();
	}
}

   2、成员函数

当子父类中出现成员函数一模一样的情况,会运行子类的函数。
这种现象,称为覆盖操作。这时函数在子父类中的特性。
函数两个特性:
    1,重载。同一个类中。overload
    2,覆盖。子类中。覆盖也称为重写,覆写。override
    
覆盖注意事项:
1,子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。 
2,静态只能覆盖静态,或被静态覆盖。

3、覆盖的应用:当子类需要父类的功能,而子类中又有自己特有的方法时,可以重写父类方法,这样既沿袭了父类方法,又定义了子类特有的内容。

class Fu
{
	public static  void show()
	{
		System.out.println("fu show run");
	}
}

class  Zi extends Fu
{
	public static void show()
	{
		System.out.println("Zi show run");
	}
}

class ExtendsDemo3 
{
	public static void main(String[] args) 
	{
//		Zi z = new Zi();
//		z.show();
		NewPhone p = new NewPhone();
		p.show();
		p.call();
	}
}

当子父类中出现成员函数一模一样的情况,会运行子类的函数。
这种现象,称为覆盖操作。这时函数在子父类中的特性。
函数两个特性:
    1,重载。同一个类中。overload
    2,覆盖。子类中。覆盖也称为重写,覆写。override
    
覆盖注意事项:
1,子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。 
2,静态只能覆盖静态,或被静态覆盖。
 

猜你喜欢

转载自blog.csdn.net/zhanshixiang/article/details/81239626