不积跬步,无以至千里;不积小流,无以成江海。

 

Java语言基础

 

Java面向对象之继承

继承的主要作用:在已有类的基础上进行功能的扩充。

减少了代码的冗余,提高了代码的复用性;

类与类之间产生关系,提供了多态的前提。

 

在Java中,继承的关键词是 extend,即子类不是父类的子集,而是对父类的扩展。

语法格式:

class 父类 {

}
class 子类 extends 父类 {

}  

关于继承的规则:

子类不能直接访问父中私有的 (private) 的成员变量和方法。(可以通过其他操作getter或setter访问)

Java只支持单继承和多层继承(不是多继承)。即一个子类只能有一个父类,而一个父类可以派生多个子类。

 

如果没有继承:

class Person{
	private String name;
	private int age;
	
	public Person() {
		System.out.println("无参构造器!");
	}
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public void say() {
		System.out.println(name + "爱学习!");
	}
	public String getInfo() {
		return "姓名:" + name + ",年龄:" + age;
	}
	
}

class Student{
	private String name;
	private int age;
	
	public Student() {
		System.out.println("无参构造器!");
	}
	public Student(String name, int age){
		this.name = name;
		this.age = age;
	}
	public void say() {
		System.out.println(name + "爱学习!");
	}
	public String getInfo() {
		return "姓名:" + name + ",年龄:" + age;
	}
}

public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person person = new Person("tutu", 24);
		person.say();
		Student student = new Student();
		student.say();
	}
}

程序输出:

tutu爱学习!
无参构造器!
null爱学习!

    

使用继承:

class Person{
	private String name;
	private int age;
	
	public Person() {
		System.out.println("无参构造器!");
	}
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public void say() {
		System.out.println(name + "爱学习!");
	}
	public String getInfo() {
		return "姓名:" + name + ",年龄:" + age;
	}
	
}

class Student extends Person{
	
}

public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person2 person = new Person2("tutu", 24);
		person.say();
		Student2 student2 = new Student2();
		student2.say();
	}
}

程序输出:

tutu爱学习!
无参构造器!
null爱学习! 

注意:不能访问父中私有的 (private) 的成员变量和方法。

那么如何访问父类的私有属性呢?

class Person{
	private String name;
	
	public Person() {
		System.out.println("无参构造器!");
	}
	public String getname() {
		return name;
	}
	public void setname(String name) {
		this.name = name;
	}
	
	
}

class Student extends Person{
	
}

public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student student = new Student();
		student.setname("tutu");
		String name = student.getname();
		System.out.println(name);
	}
}

程序输出:

无参构造器!
tutu

注意:

通过调用子类中从父类那里继承的set和get方法来访问父类中私有属性name。

但是要记住,子类并非继承到父类的私有属性name,子类只是继承了父类的非私有属性。

虽然子类可以通过以上的方法可以访问父类的私有属性,但是一般说子类可以访问父类的私有属性这些说法都是错误的。

要注意一点,如果父类中没有对私有属性的 get 和 set 方法或者其他对私有属性操作的方法,又或者这些方法都被private修饰,

这样子类是无法访问到父类的私有属性的。

 

博客借鉴:https://blog.csdn.net/thanours/article/details/79672019

posted on 2019-11-25 22:51  smile学子  阅读(226)  评论(0编辑  收藏  举报