- 面向对象知识链接汇总,知识点体系(思维导图)
- Java面向对象(第一天)类,对象,方法的重载,练习题
- Java面向对象(第二天)构造方法,this关键字,内存结构初识,null,NullPointerException,引用类型数组(上),拓展,练习题
- Java面向对象(第三天)引用类型数组(下),继承,super,向上造型(上),拓展,练习题
- Java面向对象(第四天)向上造型(下),重写,访问控制修饰符,static关键字,拓展,练习题
- Java面向对象(第五天)final,static final,abstract关键字(抽象方法,抽象类)
- Java面向对象(第六天)成员内部类(不经常使用),匿名内部类(经常使用)
- Java面向对象(第五天)接口,拓展(类与接口的关系,抽象类与接口的区别),练习题
- Java面向对象(第八天)多态(对象的多态,行为的多态),拓展(面向对象)
- Java面向对象(第九天)简单的内存结构,面向对象三大特征
- Java新手小白入门篇系列持续更新中…
文章目录
一、面向对象
1. 什么是面向对象
小伙伴们可能有很多都听说过面向对象这个概念,但是什么是面向对象呢,其实我们又说不出个所以然来。
面向对象是以对象为核心来思考,解决问题的一种方式,它是 Java 核心的一种思想;
世间的万事万物我们都可以理解成一个对象,所以才有我们万物皆对象的说法。
经过上述的描述,很多小伙伴应该说了,这我还没明白什么是面向对象啊,你这讲的是什么鬼?
我们暂时先把这个概念放下,因为要说面向对象,首先得了解两个概念:什么是类,什么是对象?等我们对这两个概念有些了解了,我们再回来看看这个概念。
2. 什么是类,什么是对象
2.1 类
-
类指的是类型(Type),是指一类事物,使用Java中的 class 关键字来描述,也可以把类理解成设计图纸,模板等
// 这里我们的 Student 就是我们所说的类 , 指的是学生这一类事物 public class Student { }
-
类是抽象的,它是一个泛指,指的不是某一个具体的东西,类呢是要提取这一类事物的共有特征(属性)与功能(行为)
-
一个类中可以包含:
- 成员变量
- 指的是一个类型所包含的(共有的)属性/特性
- 方法
- 指的是一个类型所包含的(共有的)行为/功能
// 这里我们的 Student 就是我们所说的类 , 指的是学生这一类事物 public class Student { // 成员变量 - 属性/特征 String stuId; // 学号 String name; // 名字 int age; // 年龄 String address; // 地址 // ... //方法 - 行为/功能 void study(){ System.out.println(name+"在学习..."); } void sayHi(){ System.out.println("大家好,我的学号是" + stuId + ",我叫"+name+",今年"+age+"岁了,家住"+address); } }
- 成员变量
-
一个类可以创建多个对象
-
类也是 数据类型 的一种,它属于我们的 引用类型
2.2 对象
-
对象就是根据类创建出来的一个个独立且具体的实例(实际个体)
public class StudentTests { public static void main(String[] args) { // 数据类型 引用 指向 对象 Student s1 = new Student(); // 声明一个Student类型的引用s1,指向了一个学生对象 // 还可以理解为:创建了一个学生对象,指向了Student类型的引用s1 } }
-
一个类可以创建多个对象
public class StudentTests { public static void main(String[] args) { Student s1 = new Student(); Student s2 = new Student(); Student s3 = new Student(); } }
-
每个对象都具有类里面各种属性(变量),且这些属性可能相同也可能不同
-
每个对象都具有类里的各种行为(方法),且每个对象都可以执行各种方法
// 学生测试类,用于测试对象及属性赋值和调用方法 public class StudentTests { public static void main(String[] args) { // 创建一个学生对象s1 Student s1 = new Student(); // 给s1对象的属性赋值 s1.stuId = "JSD2207080101"; s1.name = "zs"; s1.age = 24; s1.address = "辽宁沈阳"; // 调用s1对象的方法 s1.sayHi(); // 大家好,我的学号是JSD2207080101,我叫zs,今年24岁了,家住辽宁沈阳 s1.study(); // zs在学习... // 创建一个学生对象s2 Student s2 = new Student(); // 给s2对象的属性赋值 s2.stuId = "JSD2207080102"; s2.name = "ls"; s2.age = 22; s2.address = "辽宁铁岭"; // 调用s2对象的方法 s2.sayHi(); // 大家好,我的学号是JSD2207080102,我叫ls,今年22岁了,家住辽宁铁岭 s2.study(); // ls在学习... // 创建一个学生对象s3 Student s3 = new Student(); // 给s3对象的属性赋值 s3.stuId = "JSD2207080103"; s3.name = "ww"; s3.age = 18; s3.address = "辽宁营口"; // 调用s3对象的方法 s3.sayHi(); // 大家好,我的学号是JSD2207080103,我叫ww,今年18岁了,家住辽宁营口 s3.study(); // ww在学习... } }
2.3 类与对象的关系
- 我们先创建类,再通过类创建出对象
- 我们可以通过一个类创建出多个对象
- 类是抽象的,对象是具体的
2.4 属性/成员变量默认值
- 基本类型
- byte,short,int,long,char
- 默认值为 0
- float,double
- 默认值为 0.0
- boolean
- 默认值为 false
- byte,short,int,long,char
- 引用类型
- 默认值为null
二、方法的重载(overload/overloading)
1. 定义
在同一个类中,方法名称相同,参数列表不同的方法叫方法的重载
重载是一个类里,方法的一种特性/特质,它是在二个或者多个方法才会产生
2. 重载的注意事项
2.1 在重载定义中,参数列表不同指的是:
- 与参数的名称无关,只与参数类型有关
- 一个参数
- 参数类型不同表示参数列表不同
- 多个参数
- 参数类型的顺序不同表示参数列表不同
- 一个参数
2.2 重载与返回值无关
- 方法的重载和 方法的返回值 没有任何关系,它只与方 法的名称和参数列表 有关
public class Aoo{
void show(){}
void show(String name){}
void show(int age){}
void show(String name,int age){}
void show(int age,String name){}
//int show(){ return 1; } //编译错误,重载与返回值类型无关
//void show(String address){} //编译错误,重载与参数名称无关
}
2.3 在使用方法时,如何识别具体使用的是何方法
编译器在编译时会自动根据 方法的签名 自动绑定方法
2.3.1 方法的签名
方法的签名 = 方法名 + 参数列表
public class AooTests {
public static void main(String[] args) {
Aoo o = new Aoo();
o.show();
o.show("zhangsan");
o.show(25);
o.show("zhangsan",25);
o.show(25,"zhangsan");
}
}
三、练习题
1. 习题
1.1 类与变量的练习
- 创建一个手机类 Phone
- 成员变量
- 品牌 brand
- 型号 type
- 内存 ram
- 颜色 color
- 屏幕尺寸 size
- 价格 price
- 方法
- 打电话 call
- 输出:使用xx品牌手机,xx型号,打电话,xx颜色晃瞎了眼
- 发短信 message
- 输出:我新换了一个手机,内存xx,xx寸,山寨版,xx价格贼合适
- 打电话 call
- 成员变量
- 创建一个手机测试类 PhoneTest
- main方法
- 创建三个手机对象,并为其属性赋值
- 调用其两个方法,输出结果
- main方法
1.2 成员变量默认值
- 成员变量类型为 char ,其默认值为 0,是否正确,如何能验证,为什么?
1.3 方法重载练习题
- 定义两个重载方法 avg,分别用来求两个整数、三个整数的平均值,然后分别调用并将结果输出
- 定义两个重载方法 maxNum,分别用来求两个整数的较大值、三个整数的最大值,分别调用并将结果输出
2. 答案
2.1 类与变量的练习
- 创建一个手机类 Phone
- 成员变量
- 品牌 brand
- 型号 type
- 内存 ram
- 颜色 color
- 屏幕尺寸 size
- 价格 price
- 方法
- 打电话 call
- 输出:使用xx品牌手机,xx型号,打电话,xx颜色晃瞎了眼
- 发短信 message
- 输出:我新换了一个手机,内存xx,xx寸,山寨版,xx价格贼合适
- 打电话 call
- 成员变量
- 创建一个手机测试类 PhoneTest
- main方法
- 创建三个手机对象,并为其属性赋值
- 调用其两个方法,输出结果
- main方法
答案:
Phone类
// Phone电话类
public class Phone {
String brand; //品牌
String type; //型号
String ram; //内存
String color; //颜色
String size; //屏幕尺寸
double price; //价格
// 打电话方法
void call() {
System.out.println("使用"+brand+"手机,"+type+",打电话,"+color+"颜色晃瞎了眼");
}
//发短信方法
void message() {
System.out.println("我新换了一个手机,内存"+ram+","+size+"寸,山寨版,"+price+"贼合适");
}
}
PhoneTest类
// 电话测试类
public class PhoneTest {
public static void main(String[] args) {
Phone p1 = new Phone();
p1.brand = "苹果";
p1.type = "iphone13 pro max";
p1.ram = "256G";
p1.color = "星光色";
p1.size = "6.7英寸";
p1.price = 777;
p1.call();
p1.message();
System.out.println("===============================");
Phone p2 = new Phone();
p2.brand = "华为";
p2.type = "HUAWEI Mate40 Pro+";
p2.ram = "256G";
p2.color = "黑色";
p2.size = "6.76英寸";
p2.price = 888;
p2.call();
p2.message();
System.out.println("===============================");
Phone p3 = new Phone();
p3.brand = "小米";
p3.type = "12S Ultra";
p3.ram = "512G";
p3.color = "冷杉绿";
p3.size = "6.73英寸";
p3.price = 666;
p3.call();
p3.message();
}
}
2.2 成员变量默认值
-
成员变量类型为 char ,其默认值为 0,是否正确,如何能验证,为什么?
public class Demo { char c; public static void main(String[] args) { Demo demo = new Demo(); // 查看控制台结果,控制台结果为数字0所对应的字符,所以我们可以类型转换 System.out.println(demo.c); System.out.println(demo.c == 0); System.out.println((int)demo.c); } }
2.3 方法重载练习题
-
定义两个重载方法avg,分别用来求两个整数、三个整数的平均值,然后分别调用并将结果输出
答案:
重载方法定义public class Demo { double avg(int num1,int num2) { return (num1 + num2)/2.0; } double avg(int num1,int num2,int num3) { return (num1 + num2 + num3)/3.0; } }
重载方法测试
public class OverloadDemo { public static void main(String[] args) { int a = 5; int b = 10; int c = 4; Demo demo = new Demo(); double result1 = demo.avg(a,b); System.out.println(result1); double result2 = demo.avg(a,b,c); System.out.println(result2); } }
-
定义两个重载方法maxNum,分别用来求两个整数的较大值、三个整数的最大值,分别调用并将结果输出
答案:
重载方法定义public class Demo { int maxNum(int num1,int num2) { return num1>num2?num1:num2; } int maxNum(int num1,int num2,int num3) { int max = num1>num2?(num1>num3?num1:num3):(num2>num3?num2:num3); /* //方法2: int max = num1>num2?num1:num2; max = max>num3?max:num3; */ /* //方法3: int max = maxNum(maxNum(num1,num2),num3); */ return max; } }
重载方法测试
public class OverloadDemo { public static void main(String[] args) { int a = 5; int b = 10; int c = 4; Demo demo = new Demo(); int max1 = demo.maxNum(a,b); System.out.println(max1); int max2 = demo.maxNum(a,b,c); System.out.println(max2); } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107645.html