继承
概念
生活中我们经常听到一些名词,譬如富二代,官二代,红二代,穷二代,农二代等等,它代表中人与人之间的一种关系。那么程序当中怎么表示这种关系呢?
概念:描述两个类的关系的。在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类(派生类,SubClass),现有类被称作父类(超类,SuperClass),子类会自动拥有父类所有非私有的属性和方法
意义:
A:避免重复的代码。(从子类的角度)
B:扩展类的功能。(从父类的角度)
继承性:子类,父类。存在继承关系。
子类对象,可以直接访问父类的非私有的属性和方法。(避免重复代码)
子类也可以新增自己的属性和方法。(扩展类的功能)
子类可以重新实现父类已有的方法。(扩展类的功能)
语法:
父类:A类
子类:B类 extends 父类A
语法结构:
class 父类{
}
class 子类 extends 父类{
}
extends 关键字:表示两个类是继承关系。
public class Person {
String name;
int age;
public void eat(){
System.out.println("吃东西。。。。。");
}
public void sleep(){
System.out.println("睡觉");
}
}
/**
* extends关键字:表示两个类是继承关系。
*/
public class Student extends Person{
String school;
//@Override可以不加,但是如果加上,子类的重写的方法一定要和父类的那个方法名相同
public void eat(){
System.out.println("学生吃东西。。。。。");
}
public void study(){
System.out.println("学习了。。。。。");
}
}
//父类的创建
Person p1 = new Person();
p1.name = "乔布斯";
p1.age = 55;
p1.eat();
p1.sleep();
//p1.study();父类无法访问子类新增的方法和属性
Student stu = new Student();
stu.name = "小学生";
stu.age = 34;
stu.eat();
stu.sleep();
stu.school = "清华";
stu.study();//子类肯定可以访问新增的方法
继承中的构造方法
public class Animal {
private String type;
int age;
String color;
public Animal(){
System.out.println("父类Animal无参构造函数......");
}
public Animal(String type, int age, String color) {
System.out.println("父类Animal有参构造函数......");
this.type = type;
this.age = age;
this.color = color;
}
public void eat(){
System.out.println("动物吃东西.....");
}
public void print(){
System.out.println("type:"+type+";age:"+age+";color:"+color);
}
}
//继承父类非私有的属性和方法
public class Cat extends Animal{
public Cat(){
System.out.println("子类Cat无参构造......");
}
public Cat(String type,int age,String color,String name){
super(type,age,color);//super()指代父类构造函数的时候,也只能放在第一句,如果显式调用了某个构造函数,就不会默认调用无参构造了
System.out.println("子类Cat有参构造函数......");
// this.age = age;
// this.color = color;
this.name = name;
}
//新增一些属性和方法
String name;
//重新实现父类的方法
// @Override//相当于加了约束,
// public void eat(){
// System.out.println("猫吃鱼........");
// }
public void catchMouse(){
System.out.println("抓老鼠......");
}
}