不积跬步,无以至千里;不积小流,无以成江海。
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
浙公网安备 33010602011771号