day 10
面向对象
c++ python java
将大问题拆分成小问题,借助不同的对象去解决,最终实现功能
定义一个类 创建一个对象 将复杂的对象简单化
面向过程
强调按步骤实现功能,先分析解决问题要经过的步骤,然后定义方法实现每个步骤的功能
然后依次调用方法,去解决问题
面向对象的语言特征
面向对象语言的三大特征:
继承 封装 多态
对象的理解
任何事物都是一个对象(oaject)
对象由对象组成
每个对象都有属性(静态的描述信息)、行为(动态的功能描述)
具有相似属性和行为的对象可以归为一类
类的定义
具有相同属性和行为的对象可以归为一类,类在java中是一种数据类型
基本数据类型
应用数据类型:类 String
类的组成
属性
指这类事物的静态特征
方法(行为)
事物所具有的动态功能
类 是对现实生活中 具有共同属性和行为的事物的抽象
对象是类的实例 类是对象的抽象(数据类型)
类的定义格式
public 权限修饰符 class 数据类型 Test类名{
//属性
权限修饰符 数据类型 变量名;
public int a;
//功能(方法、行为)
权限修饰符 返回值数据类型 方法名(形参列表);{
//方法语句体
}
//功能体语句 构造器 构造方法 创建对象需要用到
}
变量类型
成员变量
定义在类中,方法外;
在堆内存
成员变量具有默认值
生命周期:随着对象的存在而存在
局部变量
定义在方法中,或者方法的形参列表上;
在栈内存
没有默认值
生命周期:随着方法的调用而生成,方法调用完毕消失
封装
是面向对象语言的三大特征,另外两个是继承和多态
封装 隐藏对象的属性和实现的细节 仅对外提供公共的访问方式
提高安全性
用户不需要知道内部具体复杂的实现。只需要使用对应的功能即可
封装的原则
把不需要对外提供的内容隐藏起来
把属性隐藏掉,提供方法来修改,保证数据的安全
属性:
余额
stu1.name = "张三";
card.balance = 10000;
封装的实现
1. 用 private 修饰成员属性(成员变量)
2. 提供对应的公开的 public set和 public get方法
this关键字
this关键字可以用来区分局部变量和成员变量
public void setId(String id){
this.id = id; // this.id 就是成员变量
}
public void setId(String newId){
id = newId; // id 就是成员变量
}
构造函数(构造方法)
构造方法可以对对象进行初始化操作
当为对象开辟内存空间时,就给对象的成员变量赋初始值
在创建对象的时候,每创建一次对象就会执行一次构造方法
构造方法不能手动调用
用户如果没有写无参构造器,那么系统会默认提供一个;
当用户有写无参构造器,系统不提供了。
在构造方法中,可以借助this调用其他构造方法,
必须放到构造方法中的第一行有效代码上
构造方法的格式
java程序 一般会有测试类和基础的区分
测试类
包含main方法,作为程序的入口
基础类
student
teacher
练习
/手机品牌 :小米,价格:2999
//打电话
//给 老默发信息:我要吃鱼
基础类
public class phone{
String brand;
int price;
String color;
//定义一个变量,给谁发短信
public void call(String name,String say){
System.out.println("给"+name+"打电话:"+say);
}
public void sayNote(String name,String message){
System.out.println("给" +name+"发信息:"+message);
}
public void sayHello(){
System.out.println("手机的品牌: "+brand+", 价格:"+price+"。颜色是:"+color);
}
}
ublic class phoneTest{
public static void main(String[] args) {
// 创建people实例
phone p = new phone();
p.brand="小米";
p.price=2999;
p.color="red";
p.sayHello();
p.sayNote("老莫","你莫走");
p.call("老莫","想你啊!");
// javac phone.java phoneTest.java
// java phoneTest
}
}
定义一个动物类
属性包含:名字
种类:猫 狗
等
方法:
say Hello
我是 狗子 ,我的名字是 点点 ,我一岁啦 我的颜色是白色
eat()
猫吃鱼
狗吃肉
熊猫 吃 竹子
public class Animal{
String type;
String name;
int age;
String color;
// public void sayHello(String kinds,String name,int age,String color){
// System.out.println("我是" +kinds+",我的名字是"+name+",我"+age+"岁啦!我的颜色是"+color);
// }
public void sayHello(){
System.out.println("我是" +type+",我的名字是"+name+",我"+age+"岁啦!我的颜色是"+color);
}
public void eat(String food){
System.out.println(type+"吃"+food);
}
}
public class AnimalTest{
public static void main(String[] args) {
Animal animal1 = new Animal();
animal1.type="小狗";
animal1.name="点点";
animal1.age=1;
animal1.color="白色";
animal1.sayHello();
animal1.eat("肉肉");
Animal animal2 = new Animal();
animal2.type="猫";
animal1.name="花花";
animal1.age=6;
animal1.color="花花的";
animal1.sayHello();
animal1.eat("鱼鱼");
Animal animal3 = new Animal();
animal3.type="熊猫";
animal1.name="八宝";
animal1.age=3;
animal1.color="黑白相间";
animal1.sayHello();
animal3.eat("竹子");
}
}