Java(四)继承,字符进制,数组,expressions & statements



一. Inheritance(继承)

  • 继承(Inheritance)是面向对象编程的重要概念,允许一个类(子类sub-class)从另一个类(父类或超类super-class)继承属性和行为,促进了代码重用和创建类的层次结构。
  • 子类可以重用父类的成员变量和方法,并且可以定义自己的成员变量和方法。
  • 继承使用关键字 extends 来实现。子类继承父类的所有非私有****成员变量和方法。子类可以通过继承获得父类的特性,并且可以在其基础上扩展或修改
  • Java 不支持多继承,即一个类不能直接继承多个类。但你可以通过实现接口来实现类似的功能。
  • 子类subclass/derived class/child class
  • 父类superclass/base class/parent class
  • import java.lang.Object
    Inheritance_oracle

1. Classes form a hierarchy

  • a sub-class extends a super-class
  • a child-class extends a parent-class
// 父类(超类)
class Animal {
    public void eat() {
        System.out.println("Animal is eating.");
    }
}

// 子类(继承Animal类)
class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking.");
    }
}

// 另一个子类(也继承Animal类)
class Cat extends Animal {
    public void meow() {
        System.out.println("Cat is meowing.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // 调用父类的方法
        dog.bark(); // 调用子类的方法

        Cat cat = new Cat();
        cat.eat();  // 调用父类的方法
        cat.meow(); // 调用子类的方法
        
        // 以下行会导致编译错误,因为Cat类没有bark方法
        // cat.bark(); 子类之间不能相互调用
    }
}

2. 子类不能直接调用父类的构造方法,需要用super()

  • 在Java中,子类是不能直接调用父类的构造函数的。但是,子类的构造函数会隐式调用父类的构造函数,以确保父类的初始化工作完成。
  • 这个调用是通过使用 super() 关键字实现的,该关键字用于调用父类的构造函数。在子类的构造函数中,如果没有明确调用 super(),则会自动调用父类的无参数构造函数(如果父类有无参数构造函数)。
class Parent {
    private int parentValue;

    // 父类构造函数
    public Parent(int value) {
        this.parentValue = value;
        System.out.println("Parent class constructor called with value: " + value);
    }

    public void displayParentValue() {
        System.out.println("Parent value: " + parentValue);
    }
}

class Child extends Parent {
    private int childValue;

    // 子类构造函数
    public Child(int parentValue, int childValue) {
        super(parentValue);  // 显式调用父类构造函数
        this.childValue = childValue;
        System.out.println("Child class constructor called with value: " + childValue);
    }

    public void displayChildValue() {
        System.out.println("Child value: " + childValue);
    }
}

3.子类可访问父类中的public和protected,不能直接访问private,访问private:

1. 使用 Protected 方法

将父类的 private 成员封装在受保护(protected)的方法中,然后子类可以访问这些方法。这种方法使子类能够访问 private 成员,同时仍然保留了一定程度的封装性。

public class Parent {
    private int privateField;

    protected void setPrivateField(int value) {
        privateField = value;
    }
}

public class Child extends Parent {
    public void modifyPrivateField(int value) {
        setPrivateField(value); // 子类可以通过受保护方法访问父类的 private 成员
    }
}

2.使用公共方法

如果你希望子类可以间接地访问父类的 private 成员,可以在父类中提供公共方法,通过这些方法来访问 private 成员。

public class Parent {
    private int privateField;

    public int getPrivateField() {
        return privateField;
    }
}

public class Child extends Parent {
    public void modifyPrivateField(int value) {
        int currentValue = getPrivateField();
        // 在子类中可以通过公共方法访问父类的 private 成员
    }
}

需要注意的是,直接访问父类的 private 成员可能破坏了封装性和安全性,因此在设计时要慎重考虑。通常,推荐使用受保护方法或公共方法来访问这些成员,以保持代码的良好封装和可维护性。


二. 字符&进制

字符字面值包括单个字符,使用单引号括起来。

char letterA = 'A';

字符串字面值使用双引号括起来。

String greeting = "Hello, World!";

浮点数字面值可以使用小数点来表示浮点数,也可以使用科学计数法。

double floatValue = 3.14;    // 常规浮点数
double scientificValue = 1.23e-4; // 科学计数法

整数字面值可以用十进制、八进制(以0开头)或十六进制(以0x开头)表示。

  • binary二进制
  • octal八进制
  • demical十进制
  • hexadecimal十六进制
int decimalValue = 42;      // 十进制
int octalValue = 052;       // 八进制
int hexValue = 0x2A;        // 十六进制

Java还允许使用特殊字符转义序列来表示特殊字符,如换行符 \n、制表符 \t 等。

String specialCharacters = "Newline: \nTab: \t";

三. Array

Array holds a fixed number of values of a given type (or sub-type) that can be accessed by an index.
oracle_array

1.数组的声明和初始化

要声明一个数组,需要指定数组的数据类型,然后使用方括号 [] 来表示数组。例如,int[] numbers 声明了一个整数数组。
数组可以通过 new 操作符来初始化,或者使用花括号 {} 列出初始化元素。

int[] values;//声明
int[] numbers = new int[5]; // 声明并初始化一个包含5个整数的数组
int[] values = {10, 20, 30, 40, 50}; // 初始化数组并赋予初值
values = new int[]{10, 20, 30, 40, 50};

2.数组的访问

数组的元素可以通过索引来访问,索引从 0 开始,依次递增。例如,numbers[0] 访问数组中的第一个元素。

int firstValue = numbers[0]; // 访问数组中的第一个元素

3.数组的长度

您可以使用数组的 length 属性来获取数组的长度,即数组中包含的元素数量。

int arrayLength = numbers.length; // 获取数组的长度

4.数组的迭代

您可以使用循环来迭代数组中的所有元素,例如 for 循环或增强的 for-each 循环。

for (int i = 0; i < arrayLength; i++) {
    int element = numbers[i];
    // 处理数组中的每个元素
}

for (int value : values) {
    // 使用增强的 for-each 循环遍历数组
}

5.多维数组

Java支持多维数组,例如二维数组、三维数组等。多维数组可以用来表示矩阵、表格等多维数据结构。

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6}
};
int value = matrix[1][2]; // 访问二维数组中的元素

6.数组的注意事项

  1. 数组的大小一旦确定,就无法更改。要改变数组的大小,需要创建一个新数组复制元素。
  2. 数组的元素类型必须一致,即数组中的所有元素都必须是相同的数据类型。
  3. 数组可以存储基本数据类型(如整数、浮点数)或对象引用

Java数组是一个重要的数据结构,用于处理和组织大量数据。在编写Java程序时,数组通常用于存储和操作列表、集合、表格等数据。通过合理使用数组,可以有效地管理和操作数据。

三. expression & statement

oracle_1; oracle_2

1. expression

  • A construct that evaluates to a single value.
  • made up of:
    1. variables变量
    1. literals字符
    1. operators操作符
    1. method invocations方法调用
  • 在计算机编程中,表达式(Expression)是由操作符、操作数和变量组成的组合,用于计算某个值。表达式可以是数学表达式、逻辑表达式、字符串拼接等,它们可以用于计算或产生值。
  • Compound expressions follow precedence rules.(use parentheses clarify, disambiguation

(1) operators 操作符

oracle_operators1; o_operators2

  • assignment = 赋值操作符
  • arithmetic + - * / % += ± *= /= %= 算数操作符
  • unary + - ++ – ! 一元操作符
  • equality == !=, relational > >= < <=, logical && || instanceof 相等性、关系和逻辑操作符
    (instanceof:用于检查对象是否是特定类的实例。返回布尔值。)
//instanceof 是一个关键字,用于检查对象是否是特定类或接口的一个实例。
//它通常用于进行类型检查,以确定对象是否属于特定的类或接口的子类或实现类。
object instanceof ClassName
object 是要检查的对象。
ClassName 是要检查的类名或接口名。
instanceof 返回一个布尔值,如果对象是指定类或接口的一个实例,则返回 true,否则返回 false。
  • bitwise ~ & ^ | << >> >>> 位运算操作符
~:按位取反,对二进制中的每一位取反。
&:按位与,对两个二进制数的每一位进行与操作。
|:按位或,对两个二进制数的每一位进行或操作。
^:按位异或,对两个二进制数的每一位进行异或操作。
<<:左移,将二进制数向左移动指定的位数,相当于乘以2的幂次方。
>>:带符号右移,将二进制数向右移动指定的位数,带符号位保持不变,相当于除以2的幂次方。
>>>:无符号右移,将二进制数向右移动指定的位数,不保留符号位,用0填充。
这些位运算操作符通常用于处理底层的二进制数据,例如位掩码、位标志等。
  • object creation(new) 对象创建操作符
    new:用于创建对象的关键字。通过 new 关键字,可以实例化类,并在内存中分配对象的空间。例如,MyClass obj = new MyClass(); 创建了一个类型为 MyClass 的对象,并将其引用分配给变量 obj。

2.statement

A complete unit if of execution.

(1)expression statement 表达式语句

表达式语句是一种语句,用于执行表达式并忽略其结果。通常,表达式语句的目的是执行某些操作而不是返回一个值。例如,x++; 是一个表达式语句,它递增了变量 x 的值。

  • assignment expresions
  • use of ++ or –
  • metho call
  • object creation expressions

(2)declaration statements 声明语句

声明语句用于定义变量并指定其数据类型。声明语句用于在程序中引入新的变量,以便后续使用。例如,int y; 是一个声明语句,它声明了一个整数变量 y。

(3)control flow statements 控制流语句

控制流语句用于控制程序的执行流程,例如条件语句(如 if、else)、循环语句(如 for、while)以及其他控制结构。这些语句决定了哪些代码块会被执行,以及它们的执行顺序。

int a; // declaration statements
a=7; // expression statements
++a; // expression statement, increase a by 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值