面向对象的特征:继承性---Java基础

面向对象特征之二:继承(Inheritance)

面向对象的三个特征:封装性、继承性、多态性。
多态性

Java中的继承

自下而上的继承

定义了一个类A,在定义另一个类B时,发现B的功能与类A相似,考虑B继承于类A

//为描述和处理个人信息,定义类Person
class Person{
public String name;	//姓名
public int age;	//年龄
public Date birthDate;	//生日
}
//为描述和处理学生信息,定义类Student
class Student{
public String name;
public int age;
public Date birthDate;
public String school; //学校
}

通过继承,简化Student类的定义

class Person{
public String name;	//姓名
public int age;	//年龄
public Date birthDate;	//生日
}
class Student extends Person{
public String school; //学校
}
//Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以使用。

自下而上的继承

为处理描述这一类,定义Cat

class Cat{
public String name;
public int age;
public void eat(){

}
public void catchMouse(){

}
}

为处理描述这一类,定义Dog

class Dog{
public String name;
public int age;
public void eat(){

}
public void lookHome(){

}
}

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成继承关系*

class Animals{
public String name;
public int age;
public void eat(){

}
}
class Cat extends Animals{
public void catchMouse(){

}
}
class Dog extends Animals{
public void lookHome(){

}
}

继承的好处

  • 继承的出现减少了代码冗余,提高了代码的复用性。

  • 继承的出现,更有利于功能的扩展。

  • 继承的出现让类与类之间产生了is-a的关系,为多态的使用提供了前提。

    • 继承描述事物之间的所属关系,这种关系是:is-a 的关系。可见,父类更通用、更一般,子类更具体。

注意:不要仅为了获取其他类中某个功能而去继承!

继承的语法

继承的语法格式

class A{
    //属性、方法
}
class B extends A{
    
}

继承的基本概念

  • 类B,称为子类、派生类(derived class)、Sub Class

  • 类A,称为父类、超类、基类(base class)、Super Class

代码举例

public class Person{
    String name;
    int age;
    
    public void eat(){
        System.out.println("eat");
    }
    
    public void sleep(){
        System.out.println("sleep");
    }
}

public class Student extends Person{
    //Student 继承了 父类中的属性和方法
    String school; //学校
}

继承性的细节说明

  • 子类会继承父类所有的实例变量和实例方法
  • 子类不能直接访问父类中私有的(private)的成员变量和方法
class Person{
String name;
int age;
}
class Student extends Person{
String school;
}

public class ExtendsTest{
Student s1 = new Student();
s1.name = "张三";
s1.age = 3;
s1.school = "西安工程大学";
}
//编译通过
//School类是Person类的子类

由于封装性的影响,子类不能直接调用父类中声明的private的属性或方法

class Person{
private String name;
int age;
}
class Student extends Person{
String school;
}

public class ExtendsTest{
Student s1 = new Student();
s1.age = 3;
s1.school = "西安工程大学";
s1.name = "张三"; //编译不通过
//java: name 在 test.Person 中是 private 访问控制
}

但是可以通过构造set``get的方法,对private属性进行调用

class Person{
private String name;

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

public String getName(){
  return name;
}
}

class Student extends Person{

}

public class ExtendsTest{
public static void main(String []args){
  Student s1 = new Student();
  s1.setName("张三");
  System.out.println(s1.getName);
}
}


//此时,通过构造setName、getName方法,对private化成员属性进行调用
  • 子类在继承父类之后,还可以扩展自己特有的功能
  • 在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”(extends :延伸、扩展、延展)
  • 一个父类可以同时拥有多个子类
class A{

}
class B extends A{

}
class C extends A{

}
class D extends A{

}
  • Java只支持单继承,不支持多重继承

    class A{
    
    }
    class B{
    
    }
    
    class C extends A{
    
    }
    class C extends B{
    
    }
    //错误的继承
    //一个子类只能有一个父类
    
  • Java支持多层继承(继承体系)

class A{

}
class B extends A{

}
class C extends B{

}
//一个类,可以是其他类的子类,同时也可以是其他类父类
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值