08
面向对象
概述
- 面向过程的语言:C
- 面向过程追求的是一个过程,在乎代码实现的过程
- 面向对象的语言:Java Python Scala
- 追求的是代码的实现结果,不在乎过程怎么实现 ,只要求结果正确
- Java把面向过程进行了封装
-
- ooa-------面向对象的分析(Object-Oriented anylize)
-
- ood-------面向对象的设计(Object-Oriented design)
-
- ood-------面向对象的编程(Object-Oriented program)
- 软件开发的生命周期
- 需求分析
- 概要设计
- 详细设计
- 软件开发
- 软件测试
- 上线部署
- 运行和维护
类的三大特征
- 封装
- 继承
- 多态
- (抽象)
对象六大组件
- 成员变量 : 定义在类中方法外的变量,不被static修饰的叫做成员变量
- 成员方法: 不被static修饰的方法叫做成员方法
- 局部变量: 定义在方法中的变量叫做局部变量
- 静态变量: 被static修饰的变量叫做静态变量
- 静态方法: 被static修饰的方法叫做静态方法
- 构造方法: 方法名与类名一模一样的方法叫做构造方法
类和对象的关系
- 类:同一类事物的特征和行为的抽取模板
- 一种数据类型(引用数据类型),自定义的一种类型,使用变量表示属性,使用方法表示行为
- 对象:具体存在的事物,符合类的定义特征
类的定义格式:
class 类名{
}
创建对象的格式:
类名 对象名 = new 类名();
public class Cat {
String name;
int age;
String variety;
String sex;
public void work(){
System.out.println("猫捉老鼠.");
}
public void show() {
System.out.println("姓名:"+name+",年龄:"+age+"岁,品种:"+variety+",性别:"+sex);
}
}
public class CatTest {
public static void main(String[] args) {
Cat cat = new Cat();
cat.name = "丸子";
cat.sex = "母";
cat.age = 1;
cat.variety = "英短银渐层";
cat.show();//姓名:丸子,年龄:1岁,品种:英短银渐层,性别:母
cat.work();//猫捉老鼠.
}
}
内存分析:
类的重命名:
- 右键------->refacter-------->rename
- 光标指向类名点击 Rename compilation unit to ‘NoNameObjectDemo.java’
成员变量和局部变量
- 成员变量:
- 定义在类中方法外,没有static修饰,存储在堆内存中,有初始值
- 随着对象的创建而产生,随着对象的消失而消失
- 局部变量:
- 定义在方法中或者是方法的参数列表上,存储在栈内存中,没有初始值
- 局部变量随着方法的调用而产生,随着方法的结束而消失
封装
-
成员变量私有化:private
-
- private:权限修饰符,私有的,修饰方法和变量,
-
- 被private修饰的方法和变量,只能在本类中访问
-
提供一套访问、修改的方法:get()/set()方法
this:区分同名的成员变量和局部变量,this指代的是成员变量
public class Mobile {
private String brand;
private String type;
private int price;
private String color;
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void show() {
System.out.println("手机品牌:"+brand+",手机型号:"+type+",手机价格"+price+",手机颜色:"+color);
}
}
public class MobileTest {
public static void main(String[] args) {
Mobile m1 = new Mobile();
m1.setBrand("华为");
m1.setType("Nover7");
m1.setPrice(5000);
m1.setColor("黑色");
Mobile m2 = new Mobile();
m2.setBrand("华为");
m2.setType("Nover7");
m2.setPrice(5000);
m2.setColor("黑色");
Mobile m3 = new Mobile();
m3.setBrand("华为");
m3.setType("Nover7");
m3.setPrice(5000);
m3.setColor("黑色");
Mobile m4 = new Mobile();
m4.setBrand("华为");
m4.setType("Nover7");
m4.setPrice(5000);
m4.setColor("黑色");
Mobile[] mArry = {m1,m2,m3,m4};
for (int i = 0; i < mArry.length; i++) {
mArry[i].show();
}
}
}
构造方法
构造方法的格式:
修饰符 类名(参数列表){
方法体;
}
构造方法的注意事项:
- 方法名和类名相同
- 构造方法没有返回值,连void都没有
- 构造方法是可以重载的(一个类中可以存放多个名字相同的方法,但是必须保证参数的个数或类型不同,与返回值无关)
- 构造方法在使用new关键字创建对象时调用
- 如果我们没有在类中写构造方法, 系统会默认为我们生成一个无参的构造方法
- 如果我们自己写了构造方法, 则系统不再为我们提供
public class Person {
private String name;
private int age;
public Person() {
System.out.println("我是Person类的构造方法");
}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println(name + "--" + age);
}
}
public class PersonTest {
public static void main(String[] args) {
Person person = new Person("卡卡罗特",18);
person.show();
}
}