关于JAVA的三大特性:继承,封装以及多态,各位初学编程的小伙伴们肯定早有耳闻。但这六个字每个单独都能理解,可合在一起就变成了我看不懂的亚子。(泪目)
但不用担心!因为本编文章将从一个小白的角度,生动的解答什么是继承以及相关的知识!
首先,一说到继承这两个字,我们首先想到的可能是财产继承,爵位继承等等,都是将之前属于某人的某些东西留给其他人。JAVA里的继承其实与现实中的概念十分相似,只不过不会征收“遗产税”。换言之,被继承者会把所有内容都继承给继承者。
然后,继承是发生在类之间的。被继承者被称为父类,继承者被称为父类。结合我们上面讲到的,父类会将全部都继承给子类,类似于复制粘贴。
继承的关键词是extends,要创造一个继承了父类的子类,格式为
public class 子类名 extends 父类名{
}
假设我们有个父类叫打工人,我们想创造有个更详细的子类码农;
public class programmers extends workers{
}
虽然我们之前讲到子类继承了父类的全部内容,但这不代表子类和其对象可以调用到父类的全部内容。说到这里,我们就不得不提及访问修饰符了。
别害怕,虽然访问修饰符听起来很晦涩难懂,但它其实只是一个决定谁能访问它修饰的东西的前缀。
常见的访问修饰符包括public, private, protected,和不写。下面我将介绍这几个访问修饰符起什么作用。
public:如词义,public修饰的变量和方法是完全公开的,可以随意访问。
private:依旧如词义,私密的。其修饰的变量和方法只能在本类被访问。但在其他类中可以通过定义get和set方法来访问用private修饰的变量。
假设打工人类下有一个用private修饰的变量name;
public class workers{
private String name;
}
按照我们之前讲过的,除了本类以外的其他地方都不能直接访问这个name变量。但我们可以在本类里定义用public修饰的get和set方法。
public class workers{
private String name;
/**
* Public getter that retrieves instance variable - name
*
* @return instance variable - name
*/
public String getName() {
return name;
}
/**
* Public setter that mutates instance variable - name
*
* @param name instance variable - name
*/
public void setName(String name) {
this.name = name;
}
}
这样,即使是被private修饰的变量name也可以通过这两个方法在本类外被访问和修饰了!
protected:受保护的。被protected修饰的变量和方法可以在同一个包下的不同类中被访问。包是被package打包在一起的class。如果没有被打包,在同一路径下也是可以的。而且,不同包的子类也可以访问。
举个例子,假设父类打工人在包A里,里面有一个用protected修饰的变量age。他的子类码农在包B里。码农类的方法是可以访问age的。
缺省:也就是不写访问修饰符,在此情况下,只能在同一个包下被访问。
当我们想要创建一个子类对象时,我们写下了以下代码;
workers a = new programmers();
要使这行代码成立,workers必须是programmers的父类,子类对象可以自动转换为父类类型。
要理解这个概念,我们可以试想一下,所有的码农都是打工人,但不是所有的打工人都是码农。所以如果把上面的workers和programmers翻转过来这行代码就会报错。
同时,子类必须替换父类,出现父类可能出现的任何地方。因为子类也同时继承的父类的一切。
这就是本篇关于继承的内容啦。希望各位初学编程的小伙伴们喜欢!!