2022-7-21 学习日记(12th day)JAVA面向对象(继承和重写)

本文介绍了Java中类的继承概念,包括单继承、间接继承和Object类作为所有类的父类。讨论了继承的优点和缺点,如代码复用、多态的前提以及耦合度增加等。同时,讲解了成员变量的继承特点和方法的重载与重写区别,强调了方法重写的要求。最后通过示例展示了继承和方法重写的应用。
摘要由CSDN通过智能技术生成

JAVA中方法的继承

继承的定义:

        一个类可以继承另外一个类,继承这个类以后就继承了他所有的属性和方法。

继承的作用:

        子类继承父类,代码得到复用

        继承是方法覆盖的重写和多态机制的前提(有了继承的关系才能有后面的方法的覆盖重写,和多态机制。)

继承的特点:

        1.通常情况下,a类继承b类(a extends b),a类称为b类的子类,派生类,b类叫做父类,超类,基类。

        2.在JAVA里,只能单继承(你只有一个爸爸)

        3.虽然JAVA不支持多继承,但是可以实现间接继承(一个爸爸可以有多个儿子)

        4.JAVA里也有一个祖宗类的说法(爷爷类),就是父类继承了一个Object类,那么Object类就叫爷爷类,爷爷的属性和方法可以通过父类传给子类(A-->B-->C)

        5.继承也是有缺点的:在两个类实现继承关系时,会使代码耦合度提高(若父类改变属性,子类也会受到牵连,会产生影响)

        6.子类的构造器可以有多个,但是必须和父类的构造器形式上统一。

继承的好处:

1.可以直接使用父类的接口和成员

2.可以直接创建子类,而无创建父类

3.让类与类之间产生关系,是多态的前提

继承的弊端:

1.无法改变父类,或者说无法在运行时选择父类

2.父类的改变会影响子类的改变。

继承中成员变量的特点:
1.只能继承父类的非私有化,成员变量名字相同就用子类名字,如不相同,子类没有,就用父类的
2.就近原则:谁离得近就用谁。如果有局部变量就先使用局部变量。如果没有局部变量,就先看子类的成员变量。如果子类的成员变量也没有,就看父类的成员变量。
3.super:和this用法很像,super表示父类。
方法的覆盖(重写)

方法的重写与方法的重载的区别

方法重载:

        在一个类中,如果方法的功能相似,那么就会使用方法的重载

什么条件满足后会构成方法的重载?

  1. 前提:在同一个类中
  2. 方法名相同
  3. 参数列表不同(参数的个数,参数的类型,参数类型的顺序)
  4. 方法重载于修饰符列表和返回值无关

方法的重写:

        当子类从父类继承过来的方法无法满足子类的业务需求时,子类有权利对这个方法进行重新编写

什么条件满足后会够称方法的重写?       

  1. 前提:在继承关系中
  2. 方法名和参数列表都相同
  3. 访问权限不能更低,可以更高
  4. 子类返回值类型必须小于等于父类返回值类型
  5. 抛出异常:重写的方法不能抛出比被重写的方法更大的异常

开发中,如果要重写,基本就是一模一样,我们只变方法体 

面试题:
 * == 和equals()
 * 数组的length和Stirng的length
 * this和super
 * 重载和重写

示例:

	public class Test2 {
	public static void main(String[] args){
		EnglishPerson enPer = new EnglishPerson();
		ChinaPerson cPer = new ChinaPerson();
		
		enPer.speak();
		cPer.speak();
	}
}

class Person {
	String name;		//姓名
	String skinColor;	//肤色

	public void speak() {
		System.out.println("人在讲话");
	}
}

class EnglishPerson extends Person{
	public void speak() {
		System.out.println("英国人讲话说英语");
	}
}

class ChinaPerson extends Person {
	public void speak() {
		System.out.print("中国人讲话说汉语");
	}
}

 输出结果:

链式处理:

public class Ch02 {
    public static void main(String[] args) {
        Person person = new Person();
        // 链式处理
        person.setName("张三").setAge(20);
//        person.setAge(20);
    }
}

public class Person {

    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public Person setName(String name) {
        this.name = name;

        return this;
    }

    public Integer getAge() {
        return age;
    }

    public Person setAge(Integer age) {
        this.age = age;

        return this;
    }
}

 super关键字:
        代表调用父类的结构(属性、方法、构造器)

面试题:this和super的区别?
 *
 *  在子类中当使用super调用父类的构造器时,super(age)必须是第一句话
 *  在当前类中使用this调用本类的构造器时,this(name)必须是第一句话
 *  在构造器中,如果需要使用super或this调用其他构造器,只能二选一,而且还必须是第一句话
 *
 *  super指向的父类,不代表任何对象。
 *  this指向的本类,代表当前类的对象,方法的调用者。

this可以代表对象,super不可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值