继承

继承

什么叫继承?

多个类有相同的属性和方法,把共性抽取出来放到另一个类中,然后由这个多个类去继承这个类,这多个类称为子类(派生类),存储共性的类称为父类。继承是描述类与类之间的关系。

继承的好处

1.提高了代码的复用性。2.让类与类之间产生了关系,给第三个特征多态提供了前提。

继承举例

//定义父类Person
public class Person
{
	String name;
	int age;
	char sex;
	//定义eat()
	public void eat()
	{
		System.out.println(name+"大口吃饭");
		}
}
		//定义子类,使用extends关键字来描述子类与父类之间的继承关系
		//定义一个学生类
public class Student extends Person
	{
		String classNum;//定义班级
		//定义study()
		public void Study()
		{
		System.out.println("好好学习");
		}
	}
	//定义一个老师类
public class Teacher extends Person
		{
			String school;//所属学校
			//定义一个manageClass()
			public void manageClass()
			{
			}
		}
		//使用子类的时候,子类会继承父类的非私有成员(成员变量和成员方法)
public class Test
	{
		public static void main(String [] args)
		{
			Student s=new Student();
			Teacher t=new Teacher();
			student.name="张三";
			student.age=18;
			student.sex="男";
			student.eat();
		}
	}	

在java的继承中,只支持单一的继承(一个儿子只能有一个亲爹),不能一个类同时继承多个类,但支持多层继承,即间接继承。

继承中成员变量的特点

1.子类继承父类,可以继承父类中的非私有成员变量
2.如果子类中的成员变量和父类中的成员变量同名,调用的是子类中的成员变量。
在自定义方法中,如果局部变量和子类中的成员变量,父类中的成员变量同名时,方法调用的是局部变量(就近原则),如果想使用子类中的成员变量,用this关键字来标明,如果想使用父类中的成员变量,通过super关键字来标明。

继承中成员方法的特点

1.子类可以继承父类的非私有成员方法
2.当父类的成员方法不满足子类的需求时,子类可以重写父类的成员方法。

什么叫方法重写

在子父类的继承中,子父类的方法名相同,调用的是子类的方法,父类的方法不能在满足子类的需求,子类重写了父类的方法。

方法重写的应用场景和注意事项

应用场景:

父类的方法无法在满足子类的需求时

注意事项:

1.方法的重写时要加注解@Override,它能够正确标明是否重写了父类的方法
2.权限问题:子类的权限一定要大于等于父类的权限。

子父类中构造函数的特点

1.子类创建对象的时候会调用父类的构造方法(不是继承构造方法),这是为了给父类的属性进行初始化。
2.在子父类的关系中,创建子类的对象时,子类的构造方法里会默认调用父类的无参构造,通过supper()(supper()不会写出来)
3.子类的构造方法只能调用一次父类的构造方法,且只能放在有效代码的第一行。

final关键字

final 用来修饰类,方法,变量
1.final修饰的类不能被继承。
2.final修饰的方法不能被重写,但可以被继承。
3.final修饰的变量变为了常量。

练习

练习一、

使用继承机制实现动物世界
创建所有动物的基类Animal类,定义姓名(name),体重(weight)属性,并创建构造函数初始化属性,定义吃(Eat)的方法,输出“真好吃”。
创建狗类(Dog),青蛙类(Frog)继承至动物类
为Dog添加咬人的方法,输出“惹我罗,咬死你!”;为Frog添加游泳的方法,输出“洗个澡,真凉快!”。
为狗类和青蛙类定义构造函数初始化属性(要求使用super调用父类的构造函数)
创建一只狗对象,调用其方法;创建一只青蛙,调用其方法

练习二、

— 创建一个动物类:
Animal:字段:name,sex访问修饰符均为public
Amimal:构造函数:无参,带两个参的分别为name和sex赋值
— 创建一个鸡类Ji继承于Animal
Ji:私有字段:chiBang,用属性封装
Ji:构造函数:带三个参的分别为name和sex和chiBang赋值,name和sex在父类赋值
Ji:toString()方法,用来作自我介绍,打印:我是XXX,我是XXX,我有XXX
— 创建一个狗类Dog继承于Animal
Dog:私有字段:weiBa,用属性封装
Dog:构造函数:带三个参数分别为name,sex,weiBa赋值,name和sex在父类赋值
Dog: toString()方法,用来作自我介绍,打印:我是XXX,我是XXX,我有XXX
— 在测试类Main方法内:
定义二个鸡对象:
花花,母,一对金黄色的翅膀
草草,公,一对银黄色的翅膀
定义二个狗对象:
小白,公,一条金白色的尾巴
小黄,母,一条银白色的尾巴
生成4个对象,分别调用相应的方法。

练习1

//父类
public class Animal {
    //属性:
    /*姓名  name
    体重  weight
    * */
    String name;
    double weight;
    //构造函数
    //无参构造
    public Animal()
    {
        System.out.println("父类的构造函数执行了");
    }
    //有参构造
    public Animal(String name,double weight)
    {
        this.name=name;
        this.weight=weight;
    }
    //定义方法eat()
    public void eat()
    {
        System.out.println("真好吃");
    }
}
public class Dog extends Animal{
    //定义无参构造函数
    public Dog()
    {
        super();
    }
    //添加方法bite()

    public void bite()
    {
        System.out.println("惹我咯,咬死你");
    }
}

public class Frog extends Animal{
    //定义无参构造函数
    public Frog()
    {
        super();
    }
    //添加游泳的方法
    public void swimming()
    {
        System.out.println("洗个澡,真凉快");
    }
}
public class AnimalTest {
    public static void main(String[] args)
    {
        Dog d=new Dog();
        Frog f=new Frog();
           d.bite();
           f.swimming();
    }
}

结果

在这里插入图片描述

练习2

public class Animal {
    public String name;
    public char sex;
    //无参构造
    public Animal()
    {

        System.out.println("这是Animal的无参构造");
    }
    public Animal(String name,char sex)
    {
        this.name=name;
        this.sex=sex;
    }
}


public class Dog extends Animal{
    private String weiBa;
    public Dog(String name,char sex,String weiBa)
    {
        super(name, sex);
        this.weiBa=weiBa;
    }
    @Override
    public String toString()
    {
        return "我是"+name+"我是"+sex+"我有"+weiBa;
    }
}
public class Ji extends Animal{
    private String chiBang;
    public Ji(String name,char sex,String chiBang)
    {
        super(name, sex);
        this.chiBang=chiBang;
    }

  

    @Override
    public String toString() {
        return "我是"+name+"我是"+sex+"我有"+chiBang;
    }
}

public class AnimalTest {
    public static void main(String [] args)
    {
        Ji j1=new Ji("花花",'母',"一队金黄色的翅膀");
        Ji j2=new Ji("草草",'公',"一队银黄色的翅膀");
        Dog d1=new Dog("小白",'公',"一条金白色的尾巴");
        Dog d2=new Dog("小黄",'公',"一条银白色的尾巴");
        System.out.println(j1);
        System.out.println(j2);
        System.out.println(d1);
        System.out.println(d2);
    }
}

结果:

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值