携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第32天,点击查看活动详情
继承_继承的概念
- 1.面向对象语言的三个特征:封装、继承、多态
- 2.什么是继承:
学员信息:
属性(属性):
学员编号
学员姓名
性别
年龄
行为(方法):
吃饭
睡觉
学习
教师信息:
属性:
员工编号
姓名:
性别:
年龄
行为:
吃饭
睡觉
教课
实现:
class Person{//人员
//1.成员属性
String perNo;
String name;
char sex;
int age;
//2.成员方法
public void eat(){//吃饭
}
public void sleep(){//睡觉
}
}
class Student extends Person{
//本类可以继承Person中的可以被继承的成员属性和方法
public void study(){//学习
}
}
class Teacher extends Person{
public void teach(){//教课
}
}
当"面向对象设计"后,我们可以将一些"同一类别的类"中的"相同的成员属性"和"相同的成员方法"进一步提取出来,定义到一个新类中,然后让设计的这些类"继承"自这个类。这样这些类中就自动拥有了允许被"继承"的成员属性和成员方法,达到"代码重用"的目的。继承自其它类的类叫:子类。被继承的类叫:父类(基类、超类)。
继承_继承的定义及使用格式
1.继承的定义:
class 子类名 extends 父类名{
}
2.格式举例:
class Person{
String name;
char sex;
}
class Student extends Person{
}
main(){
Student stu = new Student();
stu.name = "小红";
stu.sex = '女';
}
继承_继承的好处
- 1.子类继承父类后,自动"拥有了"父类中允许被继承的成员属性和方法,就达到了:代码重用的目的;
- 2.为多态提供了前提;
继承_继承后创建子类对象
class Person{
String name;
int age;
char sex;
}
class Student extends Person{
}
main(){
Student stu = new Student();//会先构造Person对象,并存储在Student对象空间内部
}
继承_Java中继承的特点1_单继承
1.单继承:一个类同时只能继承自一个父类。
class Fu1{
public void show(){
System.out.println("a");
}
}
class Fu2{
public void show(){
System.out.println("b");
}
}
class Zi extends Fu1,Fu2{//错误的--如果继承多个父类,可能会造成"同名的方法冲突"
}
main(){
Zi z = new Zi();
z.show();//编译器不知道调用哪个方法
}
继承_Java中继承的特点2_多级继承
1.多级继承:子继承父,父继承爷爷
class A{
public void show(){
System.out.println("a");
}
}
class B extends A{
public void show(){//不是冲突,是:子类重写(覆盖)父类的方法
System.out.println("b");
}
}
class C extends B{}//类C会同时继承下B中的属性和方法,也会继承下A中的属性和方法
继承_Java中一个类可以有多个子类
-
1.Java中一个父类可以有多个子类
class Person{ } class Student extends Person{ } class Teacher extends Person{ } class Employee extends Person{ } -
2.Java中一个子类只能继承自一个父类。
继承_子类中访问父类成员的特点
-
1.子类中可以继承父类中允许被继承的成员属性和成员方法;
-
2.父类中的以下成员不能被继承:
1).私有成员(成员属性、成员方法) public class Person { private String name; int age; } public class Student extends Person{ public void show(){ // System.out.println("我的名字是:" + name);//编译错误,没有继承name System.out.println("我的年龄是:" + age); } } public static void main(String[] args) { Student stu = new Student(); stu.name = "章子怡";//编译错误,没有继承name属性 } 2).构造方法: class Person{ public Person(){ System.out.println("a"); } } class Student extends Person{ public Student(String n){ System.out.println("b"); } } main(){ Student stu = new Student();//子类没有无参构造方法,而且不能继承父类的无参构造方法。 } 1.编译错误 (选择) 2.运行时异常 3.打印:a 4.打印:ab
扩展_类和类之间的几种关系
- 1."has a":有一个的关系:
class Student{}
class Teacher{}
class Classroom{
//有一名老师
Teacher t = new Teacher();
//有八十名学员
Student[] stuArray = new Student[80];
或者
ArrayList<Student> stuList = new ArrayList<>();
}
2."is a" : 是一个的关系,继承
class Person{
Stirng name;
char sex;
int age;
}
class Student extends Person{}//Student是一个Person
class Teacher extends Person{}//Teachar是一个Person
class Cat extends Person{//逻辑上不符合要求,不应该继承
}
- 3.组合关系:一个类的所有成员属性都是由其它类组成的,没有自己特有的属性:
class CPU{}
class 主板{}
class 显卡{}
class 硬盘{}
...
class 电脑{
CPU cpu = new CPU();
主板 zb = new 主板();
显卡 xk = new 显卡();
硬盘 yp = new 硬盘();
.....
}
- 4.依赖关系:
class Student{
public void show(){
System.out.println("您好,我是传智播客的一名学员,我骄傲!!");
}
}
class Teacher{
public void talk(Student stu){//是一种很强的依赖关系,也叫:紧耦合
stu.show();
}
}