java基础---继承(继承、方法覆盖)

继承思想

1.继承的定义
            继承是一种从一般到特殊的关系,是一种“is a”的关系,即子类是对父类的扩展,是一种特殊的父类;子类可以继承父类原来的某些定义,也可以增加自己特有的定义,或者覆写父类的某些定义。
2.语法格式
               在定义子类时表明自己扩展于哪一个类
                public class 子类名 extends 父类名
                {
                        //编写自己特有的状态和行为
                 }
3.关键点
                  1)java中只允许单继承,不允许多继承(同时继承于多个类,C++允许);但java允许多重继承(动物----狗----哈士奇);
                     2)Object是所有类的根类。
                  

4.继承的作用
                    1)解决代码重复问题;
                    2) 表示出一个体系。
5.实例
在现实生活中,有各种各样的角色,这里我们以Person类为父类,拓展到Teacher、Student、Programmer类

//Person类
class Person
{
	String name;//人的姓名
	int     age;//人的年龄
	double  height;//人的身高

	public void sleep()
	{
		System.out.println("It's time to sleep");
	}
}

//老师类
class Teacher extends Person
{
	String level;//老师的等级-----特有状态
}

class Student extends Person
{
	String studentNum;//学号-----学生特有属性
}

//程序员
class Programmer extends Person
{
	public void codeing()//程序员特有行为
	{
		System.out.println("码代码");
	}
}

//继承关系的演示类
class  PersonDemo
{
	public static void main(String[] args) 
	{
		//创建Person对象
		Person p = new Person();
		p.sleep();

		//创建老师对象
		Teacher t = new Teacher();
		t.name = "李云";
		t.level = "特级教师";
		System.out.println(t.name + ", " + t.level);

		//创建学生对象
		Student s = new Student();
		s.studentNum = "20181111";
		System.out.println(s.studentNum);

		//创建程序员
		Programmer p2 = new Programmer();
		p2.codeing();

	
	}
}
子类继承父类之后,可以拥有服父类的哪些状态和行为:
1.可继承的:
        1)父类中使用public修饰的成员
        2)父类中使用protected修饰的成员
        3)当父类与子类同包时,缺省修饰符的成员(也成友好成员)
2.不可继承的
         1)父类中使用private修饰的成员
         2)当父类与子类不同包时,缺省修饰符的成员(友好成员)
         3)父类的构造器,因为构造器必须和当前的类名相同


方法覆盖
1.作用
        当父类的某些实例行为不符合子类具体特性时,此时需要在子类中重新定义父类的方法,并重写方法体。
2.原则(一同两小一大)

一同

① 实例方法签名必须相同。 (方法签名= 方法名 + 方法的参数列表)

两小

② 子类方法的返回值类型是和父类方法的返回类型相同或者是其子类。

              子类可以返回一个更加具体的类.

③ 子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类。

 子类方法中声明抛出的异常小于或等于父类方法声明抛出异常类型;

 子类方法可以同时声明抛出多个属于父类方法声明抛出异常类的子类(RuntimeException类型除外);

一大

④ 子类方法的访问权限比父类方法访问权 限更大或相等。

private修饰的方法不能被子类所继承, 也就不存在覆盖的概念

方法重载和方法覆写的区别
方法重载(Overload)
方法覆写(OVerride)
---------------------------------------------
方法重载:Overload
           作用:解决同一个类中,相同功能的方法名不同的问题
           规则:两同一不同
                      同类中,同方法名,参数列表不同
方法覆写(Override)
           作用:解决子类继承父类之后,可能父类的某些实例行为不满足子类的具体特性,此时需要在子类中重新定义该方法,并重写方法体。
               规则:一同两小一大
                          具体参照上面















你可能感兴趣的:(java基础)