Java学习笔记-基础day-6-继承

本文详细介绍了Java中的继承概念,包括其好处、格式、成员访问规则以及特点。通过实例展示了如何创建父类和子类,强调了继承在提高代码复用性和建立类间关系上的作用。同时,解释了构造方法、私有成员和非私有成员在继承中的访问规则。Java的继承特点是单继承,每个类只能有一个直接父类,但可以有多个子类,并且所有类最终都继承自Object类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承

  • 面向对象语言的三大特征:封装,继承,多态
1、继承的含义

继承:在java中指的是“一个类”可以“继承自”“另一个类”。 "被继承的类"叫做: 父类/超类/基类,"继承其他类的类"叫做:子类。继承后,“子类”中就“拥有”了“父类”中所有的成员(成员变量、成员方法)。 “子类就不需要再定义了”。

2、继承的好处
  1. 提高代码的复用性(减少代码冗余,相同代码重复利用)。
  2. 使类与类之间产生了关系。
3 继承的格式

通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:

class 父类 {
	...
}

class 子类 extends 父类 {
	...
}

需要注意:Java是单继承的,一个类只能继承一个直接父类,并且满足is-a的关系,例如:Student is a Person

4、继承的演示
人类(父类):
public class Person {
    // 成员变量(注意此处的成员变量并没有使用private修饰)
    String name;
    int age;
    
    // 功能方法
    public void eat(){
        System.out.println("吃东西");
    }

    public void sleep(){
        System.out.println("睡觉");
    }
}
老师类(子类): extends 人类
public class Teacher extends Person {

	double salary;// 独有的属性
	
    public void teach(){}// 独有的方法
}
学生类(子类): extends 人类
public class Student extends Person{

}
测试:
public class Test {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        System.out.println(t.name);
        System.out.println(t.age);
        t.eat();
        t.sleep();
    }
}

继承图解如下
在这里插入图片描述

小结

  • public class 子类名 extends 父类名{
        
    }
    
  • 通过继承可以将一些共性的属性,行为抽取到一个父类中,子类只需要继承即可,提供了代码的复用性

5 继承后成员访问规则
5.1继承后构造方法的访问规则
  • 构造方法不能被继承
public class Person {
   
   // 成员变量(注意此处的成员变量并没有使用private修饰)
   String name;
   int age;
   
   //构造方法

   public Person() {
   }
   
   public Person(String name, int age) {
       this.name = name;
       this.age = age;
   }
   
   // 功能方法
   public void eat(){
       System.out.println("吃东西");
   }

   public void sleep(){
       System.out.println("睡觉");
   }
}
public class Student extends Person{

    public void study(){}// 独有的方法

}
public class Test {
    public static void main(String[] args) {
        //Student student = new Student("张三",18);编译报错
    }
}

在这里插入图片描述

5.2继承后私有成员的访问规则
  • 父类的“私有成员”可以被子类继承,但子类不能被直接访问

  • 私有成员变量对于父类只能在父类内部使用

  • 对于继承的子类,能通过get/set公共方法进行设值或者获取

    public class Fu{
        private int num = 100;//私有成员,只能在父类内部使用。
        private void method(){
            System.out.println("私有成员方法");
        }
    }
    
    public class Zi extends Fu{
    
    }
    
    public class Test{
        public static void main(String[] args) {
            Zi z = new Zi();
    	    System.out.println(z.num);// 编译错误
            z.method();// 编译错误
        }
    }
    
5.3继承后非私有成员的访问规则
  • 当通过“子类”访问非私有成员时,先在子类中找,如果找到就使用子类的,找不到就继续去“父类”中找。

    public class Fu{
        int money = 100;
        public void method(){
            System.out.println("Fu 类中的成员方法method");
        }
    }
    public class Zi extends Fu{
        int money = 1;
         public void method(){
            System.out.println("Zi 类中的成员方法method");
        }
    }
    public class Demo{
        public static void main(String[] args){
            Zi z = new Zi();
            System.out.println(z.money);//1
            z.method();// Zi 类中的成员方法method
        }
    }
    
小结
  • 构造方法不能被继承
  • 父类的“私有成员”可以被子类继承,但子类不能被直接访问
  • 当通过“子类”访问非私有成员时,先在子类中找,如果找到就使用子类的,找不到就继续去“父类”中找。
6、 继承的特点
  1. Java只支持单继承,不支持多继承。
  // 一个类只能有一个父类,不可以有多个父类。
class A {
    
}
class B {
    
}
class C1 extends A {// ok
    
} 
class C2 extends A, B {// error
    
} 
  1. 一个类只能有一个父类,但可以有多个子类。
  // A可以有多个子类
class A {
    
}
class C1 extends A {
    
}
class C2 extends  A {
    
}
  1. 可以多层继承。
class A /*extends Object*/{// 爷爷   默认继承Object类
    
}
class B extends A {// 父亲
    
}
class C extends B {// 儿子
    
}

补充: 顶层父类是Object类。所有的类默认继承Object,作为父类。

class A {} 默认继承Object类 直接继承Object类

class B extends A{} B的父类就是A,但是A的父类是Object类 间接继承Object类

java中所有类都是直接或者间接继承Object,所有类都是Object类的子类

小结:

  • 类的继承只能是单继承,不能多继承,但是可以多层继承
  • java中所有类都是直接或者间接继承Object,所有类都是Object类的子类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值