首先面向对象是相对于面向过程而言的
面向过程是一种思想,意思是我们要做任何事,都需要亲力亲为,强调的是过程。
面向对象oop(Object Oriented Programming)也是一种编程思想,相对于面向过程,我们可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化,强调结果
java是一门面向对象的语言
(涉及出来的一辆一辆车)
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
总结:类是抽象的,对象是具体的,对象是根据类设计出来的 ,类就像一张汽车模型图纸,而对象就是根据图纸创建一个个具体的小汽车
比如我们要把手机这一类事物抽象成代码:
那么这个事物的类型就是"手机",可以用类来描述.
类中包含的就是手机抽取出来的共性的属性与功能.
手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐
对象:包含特有的成员变量和方法
我们通过class关键字创建类,通过new关键字创建对象。
创建包: cn.tedu.oop
创建类: TestCreateClass.java
package cn.tedu.oop;
//!!!!!!!class要符合驼峰命名规则
//本类用于练习面向对象入门案例
//设计手机事物
/*特性:品牌,价格,尺寸,颜色
功能:打电话,发短息,看直播*/
//在一个java文件中可以创建多个class,但是被public修饰的只能有一个
//而且这个公共类的名字就是文件的名字
public class TestCreatClass {
//4.创建程序的入口函数
public static void main(String[] args) {
//通过new关键字创建对象
//5.创建手机类对象
Phone p=new Phone();//第一个Phone是自定义的类型,引用类型,格式类型(与类名相同) 对象名=new 类名
//6.使用手机的功能
//我们通过.来调用功能,类似于中文的“的”
p.call();
p.message();
p.video();
//通过第二个手机类调用方法
//7.查看对象的属性值,打印出来--Ctrl+D快速向下复制
System.out.println(p.brand);
System.out.println(p.color);
System.out.println(p.price);
System.out.println(p.size);
//8.创建第二个手机对象
Phone P2 =new Phone();
//9.调用第二个属性的方法
P2.call();
P2.message();
P2.video();
//10.找到属性值,修改成员变量的值
P2.brand="小米";
P2.color="中国红";
P2.price=99999;
P2.size=12;
System.out.println(P2.brand);
System.out.println(P2.color);
System.out.println(P2.price);
System.out.println(P2.size);
}
//1.通过class关键字创建一个手机类---描述手机这一类事物
static class Phone{
//2.特征/属性:---类的成员变量来描述---位置在类里方法外
String brand;
double price;
double size;
String color;
//3.功能---类的方法来描述,修饰符 返回值类型 方法名(参数列表){}
public void call(){
System.out.println("打电话");
}
public void message(){
System.out.println("打短信");
}
public void video(){
System.out.println("看直播");
}
}
}
①将一类事物的特征和功能封装成一个“”“类”组件
②
封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
好处:
是一个权限修饰符 ,可以用来修饰成员变量和成员方法.被私有化的成员只能在本类中访问
创建包: cn.tedu.oop
创建类: TestPrivate.java
TIPS:如何封装?封装后的资源如何访问?
我们可以使用private关键字来封装成员变量与方法
如何访问私有资源?
关于成员变量:
setXxx – 对外提供公共的设置值方式
getXxx – 对外提供公共的获取值方式
关于成员方法:
把私有方法放在公共方法里供外界调用即可
创建包:cn.tedu.oop
创建类:TestCar
package cn.tedu.oop;
//本类用于测试面向对象封装
public class TestPrivate {
public static void main(String[] args) {
//4.创建对象
Student s=new Student();
//5.给对象的属性赋值
//s.id=1;
// s.name="sb";
s.setSubject("语文");
s.setId(2323);
s.setName("狗子");
//s.subject="大数据";
//6.查看给对象设置的属性值
// System.out.println(s.id);
// System.out.println(s.name);
System.out.println(s.getSubject());
System.out.println(s.getId());
System.out.println(s.getName());
//System.out.println(s.subject);
//7.通过对象调用功能
s.play();
s.study();
}
}
//1.通过class关键字描述学生这一对象
class Student{
//1.特征--成员变量
//9.1封装剩下的两个属性
private int id;//学号
private String name;//姓名
//8.1练习属性的封装--直接在属性前加private,是关键字,小写!!!!!
/**被private修饰的资源是私有资源
/私有资源只能在本类使用,外部无法访问*/
private String subject;//科目
//关于方法的第四个要素,返回值类型,如果一个方法需要返回结果,那么通过return关键字返回
//注意返回值类型String必须与返回值subject的类型保持一致
public String getSubject() {
return subject;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void setSubject(String subject) {
this.subject = subject;
}
//2.功能--方法
public void study(){
System.out.println("学习呢");
fly();// 在同类中的公共方法里直接调用这个方法,这样在其他类中可以通过创建对象调用公共方法
}
public void play (){
System.out.println("玩一会");
fly();
}
//
private void fly (){
System.out.println("飞一会");
}
}
用来控制一个类,或者类中的成员的访问范围。
TIPS:default是表示不写修饰符,默认,如果写default单词来修饰会报错
拓展7 匿名对象
没有名字的对象,是对象的简化表示形式。
使用场景:
当被调用的对象只调用一次时(多次会创建多个对象浪费内存)
Demo d = new Demo();
d.sleep();
d.game();
//这个d就是对象的名字。
也可以写成:
new Demo().show();//创建了一个对象调方法
new Demo().game();//又创建了一个对象调方法