🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”
文章目录
- `OOP`
- `总结:`
- `类和对象的说明`
- `Java中有无static修饰的方法的使用区别:`
- `✅️有static修饰的方法:`
- `❎️无static修饰的方法:`
- `总结:`
- `Java中关键字this引用的特性`
- `this的特性`
- `this的使用`
- `Java构造方法`
- `创建快捷键:fn+alt+insert`
- <font color=red> 1. 方法重载(Overloading)
- <font color=red> 2. 方法重写(Overriding)
OOP
class MyDog{
public String name;
public String color;
public int age;// --> 行为
public void barks(){System.out.println(name+":旺旺叫~");
}public void wag(){System.out.println(name+":摇尾巴~");
}}//有public修饰的就是公共类//在 Java 中,public 修饰符通常用于声明公共类型和公共成员,它们的主要特点是可以被其他类(包括不同包中的类)直接访问。// 如果没有特殊的访问控制需求,public 成员允许程序的所有部分都可以自由调用和操作这些类型或成员。//因此,你可以简单地说,public 修饰的类型被称为公共类型,而 public 修饰的成员(如方法、字段)被称为公共成员。public class OOP {public static void main(String[] args) {//--> 通过关键字new可以实例化多个对象MyDog mydog1 = new MyDog();mydog1.name = "大黄";mydog1.age=20;mydog1.color = "white";//通过对象访问属性System.out.println("姓名:"+mydog1.name);System.out.println("年龄:"+mydog1.age);System.out.println("颜色:"+mydog1.color);//通过对象调用方法mydog1.barks();mydog1.wag();
// -----------------------------------------------------------------------------------------MyDog mydog2 = new MyDog();mydog2.name = "大白";mydog2.age = 23;mydog2.color = "black";System.out.println("姓名:"+mydog2.name);System.out.println("年龄:"+mydog2.age);System.out.println("颜色:"+mydog2.color);//通过对象调用方法mydog2.barks();mydog2.wag();// -----------------------------------------------------------------------------------------
//我们可以通过new 关键字 实例化 多个对象MyDog dog3 = new MyDog();MyDog dog4 = new MyDog();MyDog dog5 = new MyDog();}
}
总结:
new关键字用于创造一个对象的实例。 使用.来访问对象中的属性或方法。 同一个类可以创建多个实例。 |
类和对象的说明
-
👏思考
-
1.引用可以指向引用吗?
-
2.一个引用能不能同时指向多个对象?
-
3.
MyDog mydog1 = null
代表mydog1
这个引用指向一个null
对象? -
- 1.不正确,引用只能指向对象(这里是两个引用同时指向一个对象)
-
- 2.不可以,我们可以尝试给
dog3
这个引用创建多个对象,结果我们可以发现dog3
这个引用是一个非常专注的宝子捏,它只能储存一个对象的地址呢。
- 2.不可以,我们可以尝试给
-
- 3.不正确,
MyDog mydog1 = null
代表mydog1
这个引用不指向任何对象。
- 3.不正确,
由于Java中基本数据类型无法直接进行交换,所以我们可以通过引用数据类型进行数据交换
//1.创建数值这个类
class MyValue{//2.赋予其对应的属性public int val;}public class SwapTwoValue {public static void swap(MyValue value1,MyValue value2){//6.接收调用所传的参数//7.交换过程int temp = value1.val;value1.val = value2.val;value2.val = temp;}public static void main(String[] args) {//3.实例化两个MyValue的对象MyValue val1 = new MyValue();MyValue val2 = new MyValue();//4.设置已实例化的属性值val1.val = 666;val2.val = 999;//8.交换前的结果System.out.println("交换前:"+val1.val);System.out.println("交换前:"+val2.val);//5.调用方法,并将两个对象的引用作为参数传入方法swap(val1,val2);//两个对象的引用val1和val2分别作为参数传入到上面的swap方法里面//9.打印调用后的结果System.out.println("交换后"+val1.val);System.out.println("交换后"+val2.val);}
}
Java中有无static修饰的方法的使用区别:
✅️有static修饰的方法:
⚠️可以通过类名直接调用,也可以通过对象调用,但推荐使用类名来调用。 |
-
ClassName.方法名()
❎️无static修饰的方法:
⚠️必需通过对象实例来调用方法。 |
-
对象名.方法名()
总结:
public class Date {public int year;//年public int month;//月public int day;//日//创建一个给年月日赋值的方法:public void SetDate(int y,int m,int d) {year = y;month = m;day = d;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ year +"月:"+ month + "日:"+ day);}public static void main(String[] args) {Date date1 = new Date();date1.SetDate(2024,9,12);date1.PrintDate();}}
public class Date {//成员变量public int year;//年public int month;//月public int day;//日//____________________________________________________________//创建一个给年月日赋值的方法:public void SetDate(int year,int month,int day) {//局部变量优先使用year = year;month = month;day = day;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ year +"月:"+ month + "日:"+ day);}public static void main(String[] args) {Date date1 = new Date();date1.SetDate(2024,9,12);date1.PrintDate();}}
在编程过程中会出现形参名和成员变量名一致的情况,局部变量会优先使用,因为int
类型的默认值是0,所以调用PrintDate
方法打印出来的结果是成员变量的默认值,即年:0月:0日:0
,所以为了区分成员变量和局部变量,我们在Java中引入关键字this
,这样我们的成员变量就能正确的被赋值为当前对象
的值。
Java中关键字this引用的特性
this
:表示当前对象的引用。
public class Date {//成员变量public int year;//年public int month;//月public int day;//日//____________________________________________________________//创建一个给年月日赋值的方法: 谁调用当前这个方法 谁就是thispublic void SetDate(int year,int month,int day) {//局部变量优先使用this.year = year;this.month = month;this.day = day;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ this.year +"月:"+ this.month + "日:"+ this.day);}public static void main(String[] args) {Date date1 = new Date();date1.SetDate(2024,9,12);date1.PrintDate();}}
this的特性
this的使用
Java构造方法
创建快捷键:fn+alt+insert
public class Date {//成员变量 --> 定义在方法外面类里面public int year;//年public int month;//月public int day;//日//______普通方法的创建__________________________________________________//创建一个给年月日赋值的方法: 谁调用当前这个方法 谁就是thispublic void SetDate(int year,int month,int day) {//局部变量优先使用this.year = year;this.month = month;this.day = day;}//创建一个打印年月人的方法:public void PrintDate(){System.out.println("年:"+ this.year +"月:"+ this.month + "日:"+ this.day);
// this.haha();}public void haha(){System.out.println("haha!");}//______构造方法(Constructor)的创建__________________________________________________//fn+alt+insert生成构造方法的快捷键//构造方法的使用在创建对象那一刻就被调用了,是最先执行的public Date() {this(2020,8,6);this.year = 2024;this.month = 9;this.day = 13;System.out.println("执行了不带参数的构造方法....................");}//含三个参数的构造方法public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("执行了带三个参数的构造方法...................");}public static void main(String[] args) {Date date1 = new Date();}}
救急不救穷
,一旦你有构造方法编译器就不会再给你提供。
对比项 | 方法重载(Overloading) | 方法重写(Overriding) |
---|---|---|
发生位置 | 同一个类中(比如说构造方法的创建) | 子类对父类的方法进行重写 |
参数列表 | (参数类型、数量或顺序)必须不同 | 必须相同 |
返回类型 | 可以相同或不同 | 必须相同 |
访问修饰符 | 无要求 | 子类的访问修饰符不能比父类更严格 |
静态/非静态方法 | 可以应用于静态方法和非静态方法 | 只能应用于非静态方法(静态方法不能被重写,但可以被隐藏) |
注解 | 不需要 | 可以使用@Override 注解以显式说明 |
1. 方法重载(Overloading)
- 定义:在同一个类中,可以定义 多个方法名相同但参数不同(参数类型、数量或顺序不同)的方法。
- 发生位置:发生在同一个类中。
- 条件:方法名相同,但参数列表不同。返回值类型可以相同或不同。
- 目的:提供同一操作的不同方式,允许根据不同的输入参数来执行不同的逻辑。
- 例子:
class Example {// 重载方法,参数列表不同void print(int a) {System.out.println("Integer: " + a);}void print(String a) {System.out.println("String: " + a);}void print(int a, int b) {System.out.println("Two Integers: " + a + ", " + b);}
}
2. 方法重写(Overriding)
- 定义:在子类中 对从父类继承的方法进行重新定义(修改),使子类能够提供自己的实现。
- 发生位置:发生在子类中,重写父类的方法。
- 条件:子类方法必须与父类方法具有相同的方法名、相同的参数列表和相同的返回值类型。方法的访问修饰符不能比父类方法更严格(可以相同或更宽松),并且重写的方法不能比父类的方法抛出更多的受检异常。
- 注解:可以使用
@Override
注解来明确表示这是一个重写方法。 - 目的:提供子类特定的实现,允许子类根据自己的需求修改父类的行为。
- 例子:
class Animal {// 父类方法void sound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {// 子类重写父类方法@Overridevoid sound() {System.out.println("Dog barks");}
}