继承是类与类之间的关系
继承至少需要两个类
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的
语法格式:
class 父类A{
... //成员变量、成员方法
}
class 子类B extends 父类A{
... //类体
}
其中 B是一个类,A是一个类
B类继承了A类。 B叫A的子类。A是B的父类(超类,基类)
案例:
class Teacher{ //声明一个Teacher类为父类
String name; //定义父类的成员变量name、age
int age;
public void eat(){ //定义父类成员方法
System.out.println("吃大盘鸡拌面");
}
}
class Student extends Teacher { //声明一个Student类为子类并继承父类
}
public class Demo1 {
public static void main(String[] args) {
System.out.println("学生");
Student student=new Student(); //声明一个Student类的实例对象student
student.name="小黑"; //子类调用父类的成员变量name并赋值
student.age=19; //子类调用父类的成员变量age并赋值
System.out.println(student.name); //打印学生的名字
System.out.println(student.age); //打印学生的年龄
student.eat(); //子类调用父类的成员方法eat
} //打印出来吃大盘鸡拌面
}
成员变量
公开的和默认的属性,子类可以继承使用的
私有的成员变量,子类无法使用的。可以使用setter和getter方法来调用父类的成员变量
成员方法
公开的和默认的成员方法,子类可以继承使用
私有的成员方法,子类无法使用的
构造方法
先执行父类的构造,再执行子类的构造方法
如果父类中有有参构造,但是没有无参构造。子类会报错
关于构造方法:父类与子类的构造方法的形式保持一致。 父类中有无参构造。子类也有无参构造。父类中没有无参构造,子类也没有无参构造方法
class Father {
private String name;
private int age;//父类的私有成员变量
public String getName() {//想要继承父类的方法必须使用setter和geter方法
return name;
}
public void setName(String name) {
this.name = name;
}
public Father () {//父类的无参构造
System.out.println("父类的构造方法");
}//eat方法 使用public修饰的 子类可以使用
public void eat () {
System.out.println("吃大米饭");
}
private void work () {
System.out.println("开拖拉机");
}//使用private修饰的方法子类无法继承
private void smoking () {
System.out.println("抽烟");
}
}
class Son extends Father {//子类继承父类
}
public class Demo8 {
public static void main(String[] args) {
Son son = new Son();
son.eat();
//son.Age(10);子类不能继承
son.setName("小黑");//继承父类的成员变量
System.out.println(son.getName());
//son.work;
//son.smoking;父类私有的方法子类不能继承
}
}
Java中继承都是单继承,只能有一个父类。
Java中可以多重继承
class A {
}
class B extends A {
}
class C extends B {
}
public class Demo9 {
public static void main(String[] args) {
}
}
重写父类中的方法
重写目的:子类可以继承父类的非私有化的方法,但是有的 时候父类的需求满足不了子类的需求了,这个时候需要重写父类非私有的方法
重写的要求:
必须有继承关系
父类的方法必须是非私有化
在子类中重写父类方法,除了方法体不一样其他都一样
必须在子类中重写
使用super关键字继承父类的成员方法和成员变量
class Animal {
public void sleep () {//声明一个方法
System.out.println("呼呼睡");
}
public void eat (String name) {//声明一个有参的方法
System.out.println("狗粮");
}
}
class Dog extends Animal {
@Override//重写的方法在子类中和父类的方法名字相同但方法体不同
public void sleep() {
System.out.println("在狗窝睡");
}
@Override//必须在子类中重写
public void eat(String name) {
// TODO Auto-generated method stub
super.eat(name);//继承父类中的成员方法
}
}
public class Demo9 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.sleep();
dog.eat(null);//打印出来狗粮
}
}



