面向对象语言的三大特性之继承

面向对象语言的三大特性继承、封装、多态,本篇文章讲解继承的相关内容。
一、基础内容
(1)定义:继承是面向对象三大特性之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属相和方法。
java中类只支持单继承,不支持多继承;
java中类支持多层继承。

(2)格式
public class 子类名 extends 父类名()
举例如下:

/*
* 父类
* */
public class Person {
    String name;
    int age;
    String sex;

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public void self_Introduction(String sex,String name,int age){
        System.out.println("本人叫"+name+","+sex+"今年"+age+"岁!");
    }
}

/*
* 子类1
* */
public class Woman extends Person {
 public void selfclass(){
        System.out.println("真好!");
    }
}
/*
* 子类2
* */
public class Man extends Person {
 public void selfclass(){
        System.out.println("真好!");
    }
}

简单编写了父类方法Person,然后分别写了两个子类方法Man、Woman继承父类,子类中没有其他任何变量和方法,接下来写个测试类,看看效果

/*
* 测试类
* */
public class Demo {
    public static void main(String[] args) {
        Man man = new Man();
        man.self_Introduction("男","张三",22);
        man.selfclass();
        Woman woman = new Woman();
        woman.self_Introduction("女","小红",23);
        woman.selfclass2();
    }
}

在这里插入图片描述
这里要总结一下子类的特点:
①子类可以调用父类的方法
②子类可以有自己的方法
(3)优点
①提高代码的复用性(多个类相同的成员可以放到同一个类中)
②提高了代码的维护性(如果方法代码需要修改,修改一处即可)
(4)弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生改变时子类的实现也不得不跟着改变,削弱了子类的独立性。
(5)什么时候用继承
继承体现的是is-a(水果和苹果,动物和绵羊)的关系,只有当两个类A和B满足,A是B的一种或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑使用继承实现,否则就不能滥用继承。
(6)继承中变量访问的特点
在子类方法中访问一个变量
首先在子类局部(方法内)范围找
然后在子类成员(子类中)范围找
最后到父类程艳范围找
若找不到则报错(比考虑父类的父类)
(7)super关键字
super关键字的用法和this关键字的用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象的引用)
举个例子

/*
* 父类
* */
public class Person {
    public int a = 1;
}

/*
* 子类
* */
public class Man extends Person {
    public int a = 2;
    public void selfclass(){
        System.out.println(super.a);
        System.out.println(a);
    }

    public static void main(String[] args) {
        Man man = new Man();
        man.selfclass();
    }
}

在这里插入图片描述
一个简单的小例子,就可以看出super的实际作用,super和this一样,作用的范围
在这里插入图片描述
二、继承中构造方法和成员方法访问特点
(1)构造方法
子类中所有的构造方法默认都会访问父类中无参的构造方法。
为什么?
①因为子类会继承父类中的数据,可能还会使用父类的数据,所以,子类初始化之前,一定要先完成父类数据的初始化
②每一个子类构造方法的第一次语句默认是:super()
如果父类中没有无参构造方法,只有带参构造方法,该怎么办?
①通过使用super关键字去显示的调用父类的类参构造方法。
②在父类中自己提供一个无参构造方法(推荐使用)。
(2)成员方法
继承中成员方法的访问特点与继承中变量访问的特点有些类似。
通过子类对象访问一个方法时
①子类成员范围找
②父类成员范围找
如果都没有就报错(不考虑父类的父类)
三、重写
方法的重写:子类中出现和父类中一模一样的方发声明。
应用:
当子类需要父类的功能,而功能主体类有自己特有的内容,可以重写父类中的方法,这样,即沿袭了父类的功能,有定义了子类特有的内容。
@Override这个注解可以帮助检查重写方法的方发声明的正确性。
举个例子

/*
* 父类
* */
public class Person {
    public void abc(){
        System.out.println("111");
    }
}
/*
* 子类
* */
public class Man extends Person {
    @Override
    public void abc(){
        System.out.println("1111");
    }
}

在这里插入图片描述
在这里插入图片描述
特殊说明:
①私有方法不能被重写(父类私有成员子类是不能继承的)。
②子类重写的方法访问权限不能低与父类中方法的访问权限(public>默认>private )
综上所述,就是对继承的学习记录!
下一节: 面型对象语言的三大特性之多态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值