1.什么是继承?
现实中的继承,比如父亲有一套房子,儿子可以继承,可以拥有。同理,Java中,被继承的叫父类,子类继承的是父类里面的东西。类里面有什么东西?有属性和有方法。所以子类继承的就是父类的属性和方法。
语法格式:
class 父类名{
}
class 子类名 extends 父类名{
}
2.在代码中如何体现?
package com.a_extends;
class Person{
String name;
int age;
public Person() {
System.out.println("父类无参构造被调用");
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
void speak()
{
System.out.println("我的名字叫做"+name+",我今年"+age+"岁,");
}
}
//继承
class Student extends Person{
String school;
public Student() {
System.out.println("子类的无参构造被调用");
}
public Student(String name, int age, String school) {
super(name, age);//super关键字说明这个方法是来自父类
this.school = school;//this关键字说明这个方法来自本身
}
void study ()
{
System.out.println("我在"+school+"读书");
}
}
public class test1 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "廖凡";
Student student = new Student("彭于晏", 24, "河南大学");
student.speak();//子类可以调用父类的方法
student.study();
student1.speak();
}
}
程序分析:
当我们new一个子类对象的时候,首先调用父类的无参构造和有参构造,构造方法在newe对象的时候执行,然后父类成员变量被赋予属性
子类可以调用父类的方法,可以拥有父类的成员变量。
运行结果:
如果子类想要在拥有父类的属性,需要注意一下几点:
- 在父类里需要写有参构造,在子类里才能构造出来,并且调用(super关键字调用)
- 父类的成员属性不能是private类型的
3. 方法的重写
当子类中的方法和父类中的方法的方法名,返回值,参数类型完全一致的时候,则可以说子类对父类的方法进行了重写。
为什么要重写?
父类的方法可能不太适合子类
package com.a_extends;
class Dog
{
String name;
int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String spreak()
{
return "我是一只"+this.name+",活了"+this.age+"年的狗";
}
}
class LittleDog extends Dog{
String kinds;
public LittleDog(String name, int age, String kinds) {
super(name, age);
this.kinds = kinds;
this.age = age;
}
//重写父类方法,参数名和方法名以及返回值与父类完全一直,只是方法体不一样
public String speak()
{
return "我是一只"+this.kinds;
}
}
public class test3 {
public static void main(String[] args) {
LittleDog littleDog = new LittleDog("嬴政", 1, "哈士奇");
System.out.println(littleDog.speak());//重写以后,则调用子类的speak()方法
}
}
运行结果: