面向对象

面向对象

面向对象和面向过程

面向过程

面向过程—过程—做什么事儿

void eat(Person p, Fan f)
  • 看重的是过程的开发
  • 如: C语言
  • 在开发一个程序的时,候看中的是中间的过程,每一个过程、步骤都需要自己去做。
面向对象

面向对象—对象—主体

Person p = new Person();
p.eat("汉堡");
  • 看中的是类的设计
  • 如:Java、C#、js…
  • 当开发一个程序的时候,不看重具体的过程,看重的是谁能帮我去完成这件事,找人(对象)帮我去做。
  • 面向对象程序设计的重点是类的设计而不是对象的设计
  • 对象都有属性和行为

优缺点:

  • 面向过程
    1.优点: 面向过程的性能比面向对象高。因为面向对象在实例化时,开销比较大
    2.缺点: 维护性、扩展性没有面向对象好
  • 面向对象
    1.优点: 维护性、扩展性好
    2. 缺点: 性能低、开销大

类和对象

概念1

  • 类(class)和对象(object)是面向对象的核心概念。
  • 类是对事物描述,抽象的、概念上的定义;
  • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
  • 例如:
    类和对象
    类就像一个汽车图纸,它是一个抽象的,概念上的定义,而对象就是根据汽车图纸真正制造出来的汽车
    对象是类的实例,类的一个产物。
String name;
int age;
int height;
String address;
int gender;

8种基本数据类型不能满足定义变量的要求----->自定义类型------>类---->生产汽车的图纸
对象—实体—真正存在的东西---->真正的汽车

如何定义类

[修饰符] class 类名 {
// 属性----成员变量
// 构造方法
//方法----成员方法、成员函数
}
定义类

怎么使用?
  • 对象名.方法名;

如何创建对象

  • 如果属性没有赋值,将会有一个默认值因为他在堆里面
class Person {
String name;
int age;
void eat() {
System.out.println("eat....");
}
}
  • 类名 对象名=new 类名();
Person p = new Person();

构造方法

在创建对象的时候被调用,给属性赋值(初始值)
1)定义类时如果没有定义构造方法,那么类中存在默认的构造方法

Person() {
}
  1. 如果自定义了构造⽅法,那么默认的构造方法会被覆盖;如果此时希望使用默认的构造⽅方法,需要自己手动定义
class Person {
String name;
int age;
//默认的构造方法
Person() {
}
//带参数的构造方法
Person(String name, int age) {
this.name = name;
this.age = age;
}
void eat() {
System.out.println("eat....");
}
}

Person p = new Person();//调用默认的构造方法

封装

隐藏该隐藏的,暴露该暴露的
1.把属性设置成private的,设置相应的get/set方法
2.方法一般设置成public的

class Person {
private String name;
private int age;
private int gender;//性别
//默认的构造方法
Person() {
}
Person(String name) {
this.name = name;
}
//带参数的构造方法
Person(String name, int age) {
//构造方法
this(name);
this.age = age;
}
public String getName() {
//this代表的是当前调用这个方法的对象
return this.name;
}
void eat() {
System.out.println("eat....");
}
}
Person p = new Peron("Tom", 10);
System.out.println(p.getName());

继承----extends----扩展

1.只能有一个直接父类,可以有多个间接父类
2.方法的重写
3.super表示父类对象,表示父类的构造方法
this表示当前类对象,表示当前类的构造方法

class Student extends Person {
private String stuId;
public void study() {
System.out.println("我的心里只有学习");
}
public void eat() {
System.out.println("student eat....");
}
}

多态

1.方法的重写和重载
2.子类对象的多态性

//左侧 p---引用 右侧 真正的对象
Person p = new Student();//子类对象赋值给父类的引用
/*
编译期间看左侧
*/
//p.study();
//运行期间看右侧
p.eat();

3.优势

class Test {
/*public void test(int a) {
}
public void test(char a) {
}
public void test(String s) {
}
public void test(Person p) {
}*/
/*
Object类是所有类的父类
Person p = new Person();
Object o = p;
test(p);
*/
public void test(Object o) {
//instanceof运算符
}
}

8.抽象类和接口

面向对象的概念

概念

面向对象的三大特征

  • 封装
  • 继承
  • 多态
定义属性

定义属性
Arrays:把数组转成相应的格式进行输出。

学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值