补充——面向对象、类、对象、属性、方法、变量
1、对象泛指一切事物,每种事物都具备自己的属性和行为。
2、面向过程思想:强调是通过调用对象的行为来实现功能。
3、面向过程:强调步骤
面向对象:强调对象
4、特点:将复杂的事情简单化,并将我们从执行者变成指挥者。
5、面向对象语言的三大基本特征:封装、继承、多态
类:一组相关属性和行为的集合
属性:该事物的状态信息
行为:该事物能够做什么
eg: 猫
属性:名字、体重、年龄、颜色
行为:走、跑、叫
对象:一类事物的具体表现,对象是类的实例,必然具备该事务的属性和行为。
现实中,一类事物的一个实例:一只小猫
eg:一只小猫
属性:汤姆、3kg、3年、黄色 行为:溜墙根走、蹦跶的跑、喵喵叫
6、类与对象的关系:
类是对一类事物的描述,是抽象的
对象是一类事物的实例,是具体的
类是对象的模板,对象是类的实体
7、事物与类的对比:
属性:事物的状态信息
行为:事物能够做什么
成员变量:对应事物的属性
成员方法:对应事物的行为
类的定义格式:
public class ClassName {
//成员变量
//成员方法
}
定义类:定义类的成员,包括成员变量和成员方法。
成员变量:在类中,方法外
成员方法:把static去掉
public class Student {
//成员变量
String name;//姓名
int age;//年龄
//成员方法
//学习的方法
publicvoid study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
publicvoid eat() {
System.out.println("学习饿了要吃饭");
}
}
8、对象的使用
对象的使用格式
类名 对象名 = new 类名();
使用对象访问类中的成员
对象名.成员变量;
对象名.成员方法();
public class Test01_Student {
public static void main(String[] args) {
//创建对象格式:类名 对象名 = new 类名();
Student s = new Student();
System.out.println("s:"+s); //cn.itcast.Student@100363
//直接输出成员变量值
System.out.println("姓名:"+s.name); //null
System.out.println("年龄:"+s.age); //0
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
s.name = "赵丽颖";
s.age = 18;
//再次输出成员变量的值
System.out.println("姓名:"+s.name); //赵丽颖
System.out.println("年龄:"+s.age); //18
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//调用成员方法
s.study(); // "好好学习,天天向上"
s.eat(); // "学习饿了要吃饭"
}
}
类与对象的练习:
定义手机类:
public class Phone {
// 成员变量
String brand; //品牌
int price; //价格
String color; //颜色
// 成员方法
//打电话
public void call(String name) {
System.out.println("给"+name+"打电话");
}
//发短信
public void sendMessage() {
System.out.println("群发短信");
}
}
定义测试类:
public class Test02Phone {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//输出成员变量值
System.out.println("品牌:"+p.brand);//null
System.out.println("价格:"+p.price);//0
System.out.println("颜色:"+p.color);//null
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
p.brand = "锤子";
p.price = 2999;
p.color = "棕色";
//再次输出成员变量值
System.out.println("品牌:"+p.brand);//锤子
System.out.println("价格:"+p.price);//2999
System.out.println("颜色:"+p.color);//棕色
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
//调用成员方法
p.call("紫霞");
p.sendMessage();
}
}
两个对象,调用同一个方法内存图
9、匿名对象:创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用场景非常有限。
匿名对象 :没有变量名的对象
格式:
new 类名(参数列表)
eg:
new Scanner(System.in);
应用场景:
1. 创建匿名对象直接调用方法,没有变量名。
new Scanner(System.in).nextInt();
2、一旦调用两次方法,就是创建了两个对象,造成浪费,请看如下代码。
new Scanner(System.in).nextInt();
new Scanner(System.in).nextInt();
一个匿名对象,只能使用一次
3、匿名对象可以作为方法的参数和返回值
作为参数:
class Test {
public static void main(String[] args) {
// 普通方式
Scanner sc = new Scanner(System.in);
input(sc);
//匿名对象作为方法接收的参数
input(new Scanner(System.in));
}
public static void input(Scanner sc){
System.out.println(sc);
}
}
作为返回值:
class Test2 {
public static void main(String[] args) {
// 普通方式
Scanner sc = getScanner();
}
public static Scanner getScanner(){
//普通方式
//Scanner sc = new Scanner(System.in);
//return sc;
//匿名对象作为方法返回值
return new Scanner(System.in);
}
}
A a = new B();
成员方法 A
成员方法父类,其他方法是子类
成员变量看父类,
成员方法看子类
静态方法看父类,
外部类访问内部类 创建对象
内部类访问外不类 直接访问