Java三大特性——继承

继承:

定义:子类继承父类的属性,使得子类对象具有与父类相同的属性和行为。子类可以直接访问父类中的非私有的属性和行为。

好处:1.提高了代码的复用性。2.使类与类之间产生了关系,是多态的前提。

 

1.继承的格式:

通过exends 关键字,可以声明一个子类继承另一个父类。

定义格式如下:

 public class 父类{

}

public class  子类 extends 父类{

}

 

演示代码如下:

扫描二维码关注公众号,回复: 2995670 查看本文章
/*
 * 定义员工类Employee,做为父类
 */
class Employee {
    String name; // 定义name属性
    // 定义员工的工作方法
    public void work() {
        System.out.println("尽心尽力地工作");
    }
}
​
/*
 * 定义讲师类Teacher 继承 员工类Employee
 */
class Teacher extends Employee {
    // 定义一个打印name的方法
    public void printName() {
        System.out.println("name=" + name);
    }
}
​
/*
 * 定义测试类
 */
public class ExtendDemo01 {
    public static void main(String[] args) {
        // 创建一个讲师类对象
        Teacher t = new Teacher();
      
        // 为该员工类的name属性进行赋值
        t.name = "小明"; 
      
        // 调用该员工的printName()方法
        t.printName(); // name = 小明
        
        // 调用Teacher类继承来的work()方法
        t.work();  // 尽心尽力地工作
    }
}

2.继承后成员变量的特点

如果成员变量不重名,则这时的访问不会出现任何影响。

如果子类与父类的成员变量重名了,这时访问的是子类的成员变量。

这时就需要使用super关键字,修饰父类成员变量。        使用格式:super.父类成员变量名

演示代码如下:

//父类

public class Fu {
		String s = "我是父类的成员变量";
}

//子类
public class Zi  extends Fu{
	String  s = "我是子类的成员变量";
		public void show() {
			System.out.println(super.s);
			System.out.println(s);
		}
}

//测试类
public class Test {

	public static void main(String[] args) {
		Zi zi = new Zi();
		zi.show();

	}

}

演示结果:
我是父类的成员变量
我是子类的成员变量

3.继承后成员方法特点

如果子类父类出现不重名的成员方法,这时调用时没有影响的。对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若没有则执行父类。

如果子类与父类中出现了重名的成员方法时,这时访问怎会出现一种特殊的情况,叫做方法重写。

方法重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或复写。声明不变,重写实现。

重写的好处:在原有的父类的基础上拓展出自己独有的功能。

简单的代码示例:

//父类
public class Fu {
		public void show() {
			System.out.println("我是父类的成员方法");
		}
		
}

//子类

public class Zi  extends Fu{
	
		public void show() {
			super.show();
			System.out.println("我是子类的成员方法。");
			System.out.println("我可以比父类更健壮!");
		}
}

//测试类
public class Test {

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

}


演示结果:
我是父类的成员方法
我是子类的成员方法。
我可以比父类更健壮!

注:这里重写时,用到super.父类成员方法,表示调用父类的成员方法。

重写的注意事项:

              1.子类方法覆盖父类方法,必须保证权限不小于父类权限

               2.子类方法覆盖父类方法,返回值类型,方法名和参数列表都要一模一样。

4.继承后构造方法的特点

1.构造方法名与类名是一致的,所以子类无法重写子类构造方法。

2.构造方法的作用是初始化成员变量的,所以子类的初始化过程中必须先执行父类的初始化动作。子类的构造

方法中默认有一个super();表示调用父类的构造方法。

代码如下:

//父类
public class Fu {
		
	public Fu() {
		System.out.println("父类构造方法");
	}
		
}

//子类
public class Zi  extends Fu{
	public Zi() {
        //super();默认调用父类构造方法
		System.out.println("子类的构造方法");
	}
		
}
//测试类
public class Test {

	public static void main(String[] args) {
		Zi zi = new Zi();
		
		
		}

}

演示结果:
父类构造方法
子类的构造方法

5.super和this

super:代表父类的引用

this:代表 当前对象的引用

super和this的用法:

1.访问成员

        this.成员变量     ----     本类的

        super.成员变量  -----    父类的

        this.成员方法名()    ----  本类的

        super.成员方法名()   -----  父类的

2.访问构造方法

this(...)  ---  本类的构造方法

super(...) --- 父类的构造方法

注:super()和this()都必须在构造方法的第一行,所以不能同时出现。

Java中只支持单继承,不支持多继承,但是支持多层继承。

猜你喜欢

转载自blog.csdn.net/XianYuZong/article/details/82145857