面向对象之封装_Java3
01_面向对象(成员变量和局部变量的区别)
-
A:在类中的位置不同
- 成员变量:在类中方法外
- 局部变量:在方法定义中或者方法声明上
-
B:在内存中的位置不同
- 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
- 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
-
C:生命周期不同
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
-
D:初始化值不同
- 成员变量:有默认初始化值
- 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
-
注意事项:
- 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
- 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
- 引用数据类型变量包括哪些:数组,类,接口,枚举
class Person {
String name; //成员变量
int num;
public void speak(int x) {
int num = 10; //x和num都是局部变量
System.out.println(name);
System.out.println(num);
}
}
02_面向对象(方法重载)
- A:方法重载
- 1:方法名相同
- 2:参数个数不同
- 3:参数类型不同
- 4:参数的顺序不同(算重载,但开发中不用)
重载:方法名相同,参数列表不同,与返回值类型无关
public class Demo2_Overload {
public static void main(String[] args) {
int sum1 = add(10, 20);
System.out.println("sum1 = " + sum1);
double sum2= add(10, 20);
System.out.println("sum2 = " + sum2);
int sum3 = add(10, 20, 30);
System.out.println("sum3 = " + sum3);
}
public static int add(int a, int b) {
return a + b;
}
public static int add(int a, int b, int c) {
return a + b + c;
}
}
03_面向对象(构造方法Constructor概述和格式)
- A:构造方法概述和作用
- 给对象的数据(属性)进行初始化
- B:构造方法格式特点
- a:方法名与类名相同(大小也要与类名一致)
- b:没有返回值类型,连void都没有
- c:没有具体的返回值return;
构造方法的作用及格式特点分别是什么?
- a:方法名与类名相同(大小也要与类名一致)
- b:没有返回值类型,连void都没有
- c:没有具体的返回值return;
- 思考:构造方法可以重载吗?
可以
class Demo1_Constructor { //Constructor构造
public static void main(String[] args) {
Person p = new Person(); //在一创建对象的时候,系统就帮我调用了构造方法
//p.Person(); //构造方法不能用对象调用
p.show();
Person p2 = new Person(); //再次创建对象
p2.show();
}
}
class Person { //类名
private String name;
private int age;
//构造方法
public Person() {
//return; //构造方法也是有return语句的,可以忽略不写;
name = "张三";
age = 23;
}
public void show() {
System.out.println(name + "..." + age);
}
}
04_面向对象(构造方法的重载及注意事项)
- A:案例演示
- 构造方法的重载
- 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
- B:构造方法注意事项
- a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
- b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
- 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
- 思考题:构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什么区别?
- 构造方法
- 给属性进行初始化
- setXxx方法
- 修改属性值
- 这两种方式,在开发中用setXxx更多一些,因为比较灵活
- 构造方法
class Demo2_Person {
public static void main(String[] args) {
Person p1 = new Person();
p1.show();
System.out.println("---------------------");
Person p2 = new Person("张三",23);
p2.show();
System.out.println("---------------------");
Person p3 = new Person("李四",24);
p3.show();
}
}
class Person {
private String name; //姓名
private int age; //年龄
public Person() { //空参构造
System.out.println("空参的构造");
}
public Person(String name,int age) {
this.name = name;
this.age = age;
System.out.println("有参的构造");
}
public void show() {
System.out.println(name + "..." + age);
}
}
05_面向对象(学生类的代码及测试)
- A:案例演示
- 学生类:
- 成员变量:
- name,age
- 构造方法:
- 无参,带两个参
- 成员方法:
- getXxx()/setXxx()
- show():输出该类的所有成员变量值
- 成员变量:
- 学生类:
- B:给成员变量赋值:
- a:setXxx()方法
- b:构造方法
- C:输出成员变量值的方式:
- a:通过getXxx()分别获取然后拼接
- b:通过调用show()方法搞定
class Demo4_Student {
public static void main(String[] args) {
Student s1 = new Student(); //使用空参构造
s1.setName("张三"); //设置姓名
s1.setAge(23); //设置年龄
System.out.println("我的姓名是:" + s1.getName() + ",我的年龄是:" + s1.getAge());
//getXxx()获取属性值,可以打印,也可以赋值给其他的变量,做其他的操作
Student s2 = new Student("李四",24);
s2.show(); //只是为了显示属性值
}
}
class Student {
private String name; //姓名
private int age; //年龄
public Student(){} //空参构造
public Student(String name,int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) { //设置姓名
this.name = name;
}
public String getName() { //获取姓名
return name;
}
public void setAge(int age) { //设置年龄
this.age = age;
}
public int getAge() { //获取年龄
return age;
}
public void show() {
System.out.println("我的姓名是:" + name + ",我的年龄是:" + age);
}
}
• 模仿刚才的学生类代码,写一个手机类并测试。
手机类:
成员变量: 品牌(brand),价格(price)
构造方法: 无参构造,带参构造
成员方法:
各个字段对应的setXXX()和getXXX()方法,
show()方法:这个方法用来显示手机的品牌和价格
06_面向对象(手机类的代码及测试)
- A:案例演示
- 模仿学生类,完成手机类代码
class Demo5_Phone {
public static void main(String[] args) {
Phone p1 = new Phone();
p1.setBrand("苹果");
p1.setPrice(1500);
System.out.println(p1.getBrand() + "..." + p1.getPrice());
Phone p2 = new Phone("小米",98);
p2.show();
}
}
class Phone {
private String brand; //品牌
private int price; //价格
public Phone(){} //空参构造
public Phone(String brand,int price) { //有参构造
this.brand = brand;
this.price = price;
}
public void setBrand(String brand) { //设置品牌
this.brand = brand;
}
public String getBrand() { //获取品牌
return brand;
}
public void setPrice(int price) { //设置价格
this.price = price;
}
public int getPrice() { //获取价格
return price;
}
public void show() {
System.out.println(brand + "..." + price);
}
}