IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java三大特性之继承 -> 正文阅读

[Java知识库]java三大特性之继承

一、继承

语法格式:

????????????????????????class? B? extends? ?A {

????????????????????????}

B类继承了A类,A类是B类的唯一的父类或者叫超类或者叫基类,B类是A类的子类

java中是单继承【可以理解为一个儿子只能有亲生父亲】

B类继承了A类, A的东西(除了私有化的)都可以用!!!

java使用关键字: extends进行继承的操作,继承至少得有两个类

//父类
class Father {
    //成员变量  公开的
    public String name;
    public int age;
    //成员变量  私有的
    private double money;

    public Father () {
        System.out.println("我是父类的无参构造方法");
    }

    //成员方法  公开的
    public void work() {
        System.out.println("开拖拉机");
    }
    //成员方法  私有的
    private void smoking() {
        System.out.println("抽旱烟");
    }
    public void test() {
        this.smoking();
    }
}

//子类
//Son类继承了Father  就意味着Son可以使用Father公开的成员变量
class Son extends Father{
    public boolean isCar;//是否有车

    public Son() {
        System.out.println("我是子类的无参构造方法");
    }

}

public class Demo {
    public static void main(String[] args) {
        Son son = new Son();
        son.name = "小邢";//name属性是继承过来的
        son.age = 3;//age属性也是继承过来的
        son.isCar = true;
        //son.money = 349.90;//由于是私有化的所以不能被继承

        son.work();//这个work是父类的
        //son.smoking();子类是不能继承父类私有的方法
        
//        Father father = new Father();
//        father.isCar;  //父类不能使用子类的变量
//        father.test();
    }
}

?成员属性:

????????????????子类能继承父类公开的成员属性

????????????????子类不能继承父类私有的成员属性

成员方法:

????????????????子类能继承父类公开的成员方法

????????????????子类不能继承父类私有的成员方法

构造方法:

????????对于无参数的构造方法,子类继承了父类,实例化子类后,会把子类的无参构造方法执行,并且也会执行父类的无参构造方法。执行循序为,先执行父类的无参构造,再执行子类的无参数的构造。

????????子类的构造的过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super()调用基类的构造方法。如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法。如果调用super,必须写在子类构造方法的第一行。如果子类构造方法中既没有显示调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。

package com.qfedu.app1;

class A{
    int ageA;

    public A(){
        System.out.println("我是A的无参构造");
    }
    public A(int ageA) {
        this.ageA = ageA;
        System.out.println("我是A的有参构造");
    }

    public void testA(){
        System.out.println("我是A的方法");
    }
}
class B extends A{
    int ageB;
    public B(){
        super(3);
    }
    public void testB(){
        System.out.println("我是B的方法");
    }
}

public class Demo1 {
    public static void main(String[] args) {
        A a1 = new A();
        B b = new B();
        A a = new B();
        a.ageA=2;
        a.testA();
//运行结果如下:
//我是A的无参构造
//我是A的有参构造
//我是A的有参构造
//我是A的方法
    }
}

?

二、super关键字

super关键字,调用父类的成员属性、成员方法、构造方法

成员变量:

????????super.age?= 20;? ? ??//只能写在子类定义的方法中

成员方法:

????????super.eat();? ? ? ? ?//只能在子类定义的方法中调用

构造方法:

????????在子类中的构造方法中去调用父类的构造方法。

【注意事项】:

1.使用super关键字时必须有继承关系。

2.super关键字必须写在子类中。意思是在子类中调用父类的一些东西

3.super.成员属性,只能写在子类的定义的方法中

4.super.方法() 只能写在子类定义的方法中

三、重写【override】

子类通过继承可以使用父类的非私有化的成员方法,但是有的时候父类的方法需求不满足子类的需求了。在不改变父类的方法需求下,可以对父类的方法进行重写

重写条件:

1.必须有继承关系

2.父类的方法必须是公开的

3.子类的方法必须和父类的方法一样(返回值,方法名字,参数)

4.必须在子类中重写

//父类
class Father {
    public void eat () {
        System.out.println("窝窝头");
    }
    public void going() {
        System.out.println("二八大杠自行车");
    }
}

//子类
class Son extends Father{
    @Override//注解  开启了严格重写模式,就是告诉你下面的方法是重写的
    public void eat() {
        System.out.println("大鱼大肉");
    }

    @Override
    public void going() {
        System.out.println("共享单车");
    }
}

public class Demo1 {
    public static void main(String[] args) {
        Son son = new Son();
        son.eat();//父类与子类都有eat方法但是他们吃的东西不一样,表现出来的是相同的方法,但是有不同的功能
        son.going();
    }
}

?四、重载【overload】

重载的条件

1.必须在同一个类中

2.方法名字必须一样,返回值可以一样也可以不一样,但是参数一定不一样

package com.boke.app3;

class Person {
    //run这三个方法就是方法的重载
    //是方法名字一样  返回值一样   参数列表一定不同!!!
    //成员方法
    public void run () {
        System.out.println("在跑步");
    }
    public void run(String name) {
        System.out.println(name + "在跑步");
    }
    public void run (String name, int age) {
        System.out.println(name + ":" + age + "在跑步");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        Person person = new Person();
        person.run();
        person.run("小明");
        person.run("小红", 37);
    }
}

五、instanceof关键字

是java中二元运算符,左边是对象,右边是类。返回值是布尔类型。当左边对象是右边的类或者子类所创建的对象时候,返回true.否则返回false

语法格式:

? ? ? ? ? ? ? ? 对象名??instanceof? ?Object;

现在有ABC三个类,A是B的父类,B是C的父类。(即C叫A为爷,C叫B为爹的关系)

package com.boke.app3;

public class Demo2 {
    public static void main(String[] args) {
      //实例化A,B,C类
        A a = new A();
        B b = new B();
        C c = new C();

        boolean result = b instanceof A;//true,B是A的子类
        boolean result1 = a instanceof A;//true,a是由A实例化得到的
        boolean result2 = c instanceof B;//true,C是B的子类
        boolean result3 = c instanceof A;//true,C是A的孙子类
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:43:56  更:2021-09-10 10:45:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:47:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码