一、继承的概念
1.继承的特点: 1.构造方法不能被继承(构造方法方法名称必须跟类名一致) 2.一个父类可以有多个子类,一个子类只能有一个父类 3.可以多重继承,也就是A继承B,B继承C 4.私有的属性和方法不能被继承
2.继承的优缺点: 优点:提高代码的复用性,降低程序的冗余度 缺点:继承破坏了封装性,继承提高了代码的耦合度 在项目开发的时候,尽快能的实现项目功能代码的高内聚,低耦合
3.继承时方法的重写: 子类继承父类,当父类的方法无法满足子类的需求时,在子类中对父类的方法重新定义,只改变方法体。 子类对象调用的是被重写之后的方法。
4.重写和重载的区别: 1.位置不同 方法的重载发生在一个类型 方法的重写方法在有继承关系的子类里面 2.写法不同 方法的重载-多个方法方法名相同,参数列表不同 方法的重写-子类重写父类的方法,方法名称和参数列表必须跟父类的方法一致
5.final关键字: final可以定义常量,常量的值为最终值,不可以被修改 final可以修饰类,被final修饰的类为最终类,没有子类,不可以被继承 final可以修饰方法,被final修饰的方法为最终方法,不能被重写
6.super关键字: super只能出现在子类中,用来访问父类的成员 super调用父类的构造方法 必须写在子类构造方法的第一行 在子类构造方法的第一行,默认有super() super调用父类的普通方法和成员属性 在子类的任意方法中通过 super.属性 访问父类的属性 在子类的任意方法中通过 super.方法() 调用父类的方法 super不能访问父类私有的属性和方法
二、继承的举例
例:设计一个父类类叫Animal01,这个类里有三个属性:名字、颜色、年龄。 设计两个子类Dog01、Cat01分别继承父类Animal01的属性和方法 设计一个主类Lesson01,实例化两个子类Dog01、Cat01对象,查看对象的属性和方法。 类Animal01代码:
public class Animal01 {
//动物有以下几个属性:名字、颜色、年龄
String name;
String color;
int age;
//动物有吃饭的方法(行为)
public void eat() {
System.out.println("吃饭。");
}
//动物有跑步的方法(行为)
public void run() {
System.out.println("跑步。");
}
//构造方法,用于初始化动物的属性
public Animal01(String name,String color,int age) {
this.name = name;
this.color = color;
this.age = age;
}
}
类Dog01代码:
public class Dog01 extends Animal01{
//初始化狗子的属性
public Dog01(String name, String color, int age) {
super(name, color, age);
}
/**
* 方法的重写(子类把父类的方法重写一遍,改变方法体)
* 当父类的方法无法满足子类的需求时,在子类中对父类的方法进行重写
* 子类对象调用的是重写之后的方法
*
*/
//狗子有吃骨头的方法(重写了继承自父类Animal01类中的吃饭方法:重写-方法名一样,方法内容改变)
public void eat() {
System.out.println("狗吃骨头");
}
//狗子有伸舌头跑步的方法(重写了继承自父类Animal01类中的跑步方法:重写-方法名一样,方法内容改变)
public void run() {
System.out.println("狗伸着舌头跑步");
}
//狗子有看家的方法,自身特有方法,非继承的方法
public void lookHome() {
System.out.println("看家。");
}
}
类Cat01代码:
public class Cat01 extends Animal01{
//定义猫猫类特有的属性-性别(非继承而来)
String sex;
//初始化猫猫的属性
public Cat01(String name, String color, int age, String sex) {
super(name, color, age);
this.sex = sex;
}
//猫猫有吃鱼的方法(重写了继承自父类Animal01类中的吃饭方法:重写-方法名一样,方法内容改变)
public void eat() {
System.out.println("猫吃鱼。");
}
//猫猫有走猫步的方法(重写了继承自父类Animal01类中的跑步方法:重写-方法名一样,方法内容改变)
public void run() {
System.out.println("猫走猫步。");
}
//猫猫有抓老鼠的方法,自身特有方法,非继承的方法
public void catchMouse() {
System.out.println("抓老鼠。");
}
}
主类Lesson01代码:
public class Lesson01 {
public static void main(String[] args) {
//new一个狗狗对象
Dog01 d1 = new Dog01("狗子一号","黑色",3);
//new一个猫猫对象
Cat01 c1 = new Cat01("猫猫一号","白色",3,"母");
//查看属性
System.out.println("狗狗的姓名是"+d1.name+",颜色是"+d1.color+",年龄是"+d1.age);
System.out.println("猫猫的姓名是"+c1.name+",颜色是"+c1.color+",年龄是"+c1.age+",性别是"+c1.sex);
//调用方法
d1.eat();
d1.run();
d1.lookHome();
c1.eat();
c1.run();
c1.catchMouse();
}
}
运行Lesson01结果:
|