Java程序设计基础学习笔记——IDEA的使用、包、封装、继承、多态

文章介绍了Java编程中IDEA的常用快捷键,如`sout`用于`System.out.println()`。讲解了包的概念,包括包的命名规则和使用,以及如何利用包进行数组排序。接着深入探讨了面向对象的三大特性——封装、继承和多态,详细阐述了继承的细节,如子类构造器对父类构造器的调用规则。同时,文章通过实例展示了类的继承关系和多态的运用。

以下笔记整理自B站UP主韩顺平【零基础 快速学Java】韩顺平 零基础30天学会Java课程

IDEA常用快捷键

System.out.println();——快捷键——sout

IDEA模板

自定义模板方法

包基本介绍

包原理

包的本质:创建不同的文件夹/目录来保存类文件

包的命名规则和命名规范

常用的包

包的使用细节

使用包完成数组排序

package com.jzalearn.pkg;

/* 注意:建议使用到哪个类就导入哪个类,不建议全部导入 */
//import java.util.Scanner;  //表示只会引入 java.util 包下的 Scanner 类
//import java.util.*;        //表示将 java.util 包下的所有类都引入(导入)

import java.util.Arrays;

public class Import01 {

    public static void main(String[] args) {

        //使用系统提供的 Arrays 完成数组排序
        int[] arr = {-1, 2, 58, 23, -5};

        //进行排序
        Arrays.sort(arr);

        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
    }
}
  • package 的作用是声明当前类所在的包,需要放在类(或者文件)的最上面, 一个类中最多只有一句 package

  • import 指令 位置放在 package 的下面,在类定义前面,可以有多句且没有顺序要求

访问修饰符规则

同类就是本类

面向对象编程的三大特征

封装、继承、多态

封装

封装实现步骤

继承

继承的本质就是建立查找关系

继承细节问题

  • 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问

  • 子类必须调用父类的构造器, 完成父类的初始化

  • 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过

  • 如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)

  • 调用父类的无参构造器:super()或者不写

  • super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)

  • super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器

  • java 所有类都是 Object 类的子类, Object 是所有类的基类.(ctrl+H可以查看继承关系)

  • 父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类)

  • 子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。

  • 不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

先在方法区加载类之间的关系,然后在堆中分配空间

访问的时候先从子类开始,如果子类中没有再访问父类,如果子类中有就结束,只要有一级不能访问,就结束,不会越过这一级。

package com.jzalearn.extend_;

public class Extendtheory {
    public static void main(String[] args) {

        Son son = new Son();
        System.out.println(son.age);        //10
        System.out.println(son.hobby);      //旅游
        System.out.println(son.name);       //大头儿子
    }
}

class GrandPa {
    String name = "大头爷爷";
    String hobby = "旅游";
}

class Father extends GrandPa {
    String name = "大头爸爸";
    int age = 10;
}

class Son extends Father {
    String name = "大头儿子";
}

课堂练习题1

分析如下代码的输出结果

package com.jzalearn.extend_.Exercise;

public class ExtendsExercise01 {

    public static void main(String[] args) {

        B b = new B();

    }
}

class A {
    A() {
        System.out.println("a");
    }
    A(String name) {
        System.out.println("a name");
    }
}

class B extends A{
    B() {
        this("abc");
        System.out.println("b");
    }
    B(String name) {
        //这里有隐藏的super()
        System.out.println("b name");
    }
}

输出结果

a
b name
b

课堂练习题2

分析如下代码的输出结果

package com.jzalearn.extend_.Exercise;

public class ExtendsExercise02 {

    public static void main(String[] args) {
        CC cc = new CC();

    }
}

class AA {                       //AA 类
    public AA() {
        System.out.println("我是 AA 类");
    }
}

class BB extends AA{ //BB 类,继承 AA 类
    public BB() {
        System.out.println("我是 BB 类的无参构造");
    }
    public BB(String name) {
        //这里有默认的super()
        System.out.println(name + "我是 BB 类的有参构造");
    }
}

class CC extends BB {
    public CC() {
        this("hello");
        System.out.println("我是 CC 类的无参构造");
    }
    public CC(String name) {
        super("hahah");
        System.out.println("我是 CC 类的有参构造");
    }
}

输出结果

我是 AA 类
hahah我是 BB 类的有参构造
我是 CC 类的有参构造
我是 CC 类的无参构造

super和this的比较

多态

课堂练习题

属性是看编译类型,方法的调用是看运行类型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AoXin_TechJZ.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值