27--面向对象的特征之二--继承

继承的基本概念

继承的功能可以直接把父类中的操作拿到子类中使用,当然子类也可以定义自己的属性和方法。
为什么要有继承:
实例1:

package com.qwy.bean;
public class Person {
    
    
	private String name;
	private int age;
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public int getAge() {
    
    
		return age;
	}
	public void setAge(int age) {
    
    
		this.age = age;
	}
}

实例2:

package com.qwy.bean;
public class Student {
    
    
	private String name;
	private int age;
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public int getAge() {
    
    
		return age;
	}
	public void setAge(int age) {
    
    
		this.age = age;
	} 
}

从上面两个实例代码上看我们可以发现Person类中已经存在name和age两个属性及对应的setter和getter方法了。而且Person和student也存在着一定的关系,因为一个学生本身就是一个Person人,现在思考一下可不可以不用在Student类中不再重新声明这两个属性及对应的setter和 getter方法呢?
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中, 那么多个类无需再定义这些属性和行为,只要继承那个类即可。此处的多个类称为子类(派生类),单独的这个类称为父类(基类 或超类)。可以理解为:“子类 is a 父类”。
类的继承的格式:
class 父类{}
class 子类 extends 父类{}

实例3:修改实例2的代码如下

package com.qwy.bean;
public class Student extends Person{
    
    
	//此时Student类中什么都不写
}

实例4:创建测试类

package com.qwy.test;

import com.qwy.bean.Student;

public class TestDemo {
    
    
	public static void main(String[] args) {
    
    
		Student student= new Student();
		student.setName("admin");
		student.setAge(22);
		System.out.println("姓名:"+student.getName()+"\t年龄:"+student.getAge());
	}
}

运行结果:
姓名:admin 年龄:22
从运行结果来看,虽然student类中什么都没写,但是我们却可以调用相应的方法,来实现我们所需要的功能,这就是继承的基本应用。

继承的作用:
1.继承的出现减少了代码冗余,提高了代码的复用性。
2.继承的出现,更有利于功能的扩展。
3. 继承的出现让类与类之间产生了关系,提供了多态的前提。
4. 注意:不要仅为了获取其他类中某个功能而去继承
扩展子类功能:
从严格意义上讲,继承性是指扩充一个类已有的功能。
1)子类继承了父类,就继承了父类的方法和属性。
2)在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和 方法。
3)在Java 中,继承的关键字用的是extends,即子类不是父类的子集, 而是对父类的扩展
实例5:

package com.qwy.bean;
public class Student extends Person{
    
    
	//此时Student类中定义自己特有的属性
	private String school;

	public String getSchool() {
    
    
		return school;
	}

	public void setSchool(String school) {
    
    
		this.school = school;
	}
	
}

测试:

package com.qwy.test;

import com.qwy.bean.Student;

public class TestDemo {
    
    
	public static void main(String[] args) {
    
    
		Student student= new Student();
		student.setName("admin");
		student.setAge(22);
		student.setSchool("华育国际");
		System.out.println("姓名:"+student.getName()+"\t年龄:"+student.getAge()+"\t学校:"+student.getSchool());
	}
}

运行结果:
姓名:admin 年龄:22 学校:华育国际
注意事项:
1.在Java中只允许单继承,不能使用多重继承,即一个子类只能继承于一个父类,但是允许多层继承,即一个子类可以有一个父亲,一个父亲还可以有一个父亲。
在这里插入图片描述

2.在一个子类继承的时候,实际上会继承父类所有的操作(属性和方法),但是需要注意的是,对于父类所有非私有的结构属于显式继承,可以直接利用子类对象操作,而所有的私有的结构属于隐式继承(间接使用子对象调用)。
实例7:

package com.qwy;

class Person {
    
    
	private String name;
	private int age;
	
	public Person(String name, int age) {
    
    
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public int getAge() {
    
    
		return age;
	}
	public void setAge(int age) {
    
    
		this.age = age;
	}
	
	
}
class Student extends Person{
    
    

	public Student(String name, int age) {
    
    
		super(name, age);//调用父类构造方法设置属性
	}
	public void say(){
    
    
		//错误:因为父类的name和age属性使用private修饰,无法访问
		//System.out.println("姓名:"+name+",年龄:"+age);
		//间接访问name属性和age属性
		System.out.println("姓名:"+getName()+",年龄:"+getAge());
	}
}
public class Demo{
    
    
	public static void main(String[] args) {
    
    
		Student s= new Student("admin", 12);
		s.say();
	}
}

运行结果:
姓名:admin,年龄:12
谁能给我一个真心的祝福?
====================================================================================================
  自己也是最近才开始写文章,看到大家都分享自己的经验给别人。我也是受益者之一,做人不能只懂的索取而不去回馈,所以也将自己学习的知识分享给大家。我不能保证每个问题都讲的是对的,毕竟我也是个学习者。如果有地方写得不对或理解有误的,也希望大家给指出,我当非常感谢。编写过程也不易,也希望大家给个赞,关注下本人。这也能激励我继续分享。
  ====================================================================================================

猜你喜欢

转载自blog.csdn.net/qwy715229258163/article/details/114415734