面向对象(上)

面向对象编程的核心概念包括封装、继承和多态。类是对具有相同属性和行为的对象的抽象,而对象是类的实例。封装是通过使数据私有化并提供公共访问方法来保护数据安全。继承允许子类从父类继承属性和行为,多态则指同一体系中不同对象对同一消息的不同响应。文章通过实例解释了如何使用这些概念,如创建大象和冰箱类,并展示了如何通过对象的方法解决问题。
摘要由CSDN通过智能技术生成

面向对象

面向对象三大特征

  • 封装 (Encapsulation)

  • 继承 (Inheritance)

  • 多态 (Polymorphism)

**面向对象:**做某件事情不需要自己亲历亲为,只需指定特定的对象去完成即可。

一个思想:

万物皆对象!!!

什么是类?

具有相同点或者相同属性的事物的集合.

类是对一组有相同数据和相同操作的对象的定义,是对象的模板,其包含的方法和数据描述一组对象的共同行为和属性.类是在对象之上的抽象,对象则是类的具体化,是类的实例.类可以有子类,也可有其它类,形成类层级结构.

学生是一个类,而对象既是具体的每一个学生。

如果我现在说:学生类出来,有人会答应嘛?

但是如果我说:学生张三出来,那么张三就会知道在叫他。

属性: 描述该事物具有的信息。

行为:该事物能干什么。

注意:在Java中,类是最基本的单位,所有我们要学会用类描述事物。

事物 → 类

属性 → 成员变量

行为 → 成员方法

理解面向对象

题目:把大象装进冰箱

接下来让我们用面向对象的思想来分析一下:

1.都有哪些类?

:大象类、冰箱类、OOPDemo

2.每个类中都有哪些行为(方法)

大象类:吃草、走路

冰箱类:开门、关门

OOPDemo:装大象的方法 main

3.类与类之间有怎么样的关系

public class ele{
    public void eat(){
        
    }
}
public class fri{
    public void open(){}
    public void close(){}
    
}

面向对象就是把现实问题抽象为对象,通过调用每个对象的属性或功能去解决问题。

对象

对象就是由数据(属性)和作用于数据的操作(行为)组成的封装体,描述客观事实的一个实体,是构成系统的基本单元.

创建对象的格式:

类名 对象名 = new 类名() ;

对象名.成员变量名 = 值; (跟成员变量类型一致); //成员变量:类中 ,方法外 成员方法(去掉static):和方法定义方法格式一样

对象名.方法名() ;调用方法,展示这个具体事物有什么功能

(在测试类里去创建)

//学生类
class Student{
    //成员变量  类中,方法外
    String name;//属性
    int age;
    String hobby;
    
    //成员方法  类中	去掉static  普通方法是有static
    public void study(){
        system.out.println("好好学习")
    }
    
}
	

封装

什么是封装?

封装就是将一个事物的属性私有化(对外界隐藏,private),保证数据的安全性

如果对外界想要访问或者修改值的话,就用对外提供成员访问的方法:setxxx(传参)/getxxx(),来对成员属性进行操作.

以后在描述或者书写事物的时候 全部私有化成员变量(属性)

private关键字的特点:

1)被private修饰的成员变量/成员方法(非静态),

只能在本类中访问,外界类不能访问!

2)虽然被私有修饰的成员变量以及成员方法(非静态)不能直接访问,但是

都可以间接的通过"public"公共访问访问!

进行封装:

①、将属性私有化,被private修饰,加入权限修饰符

②、提供public修饰的方法让别人来访问使用

③、即使外界可以通过方法来访问属性了,但是也不能随意访问,因为可以在方法中加入限制条件。

④、设置getter、setter方法,给别人提供访问的路径,idea快捷键:alt+insert键快速生成

/*
*封装演示
*/
public class Person {
    /*
     * 对属性的封装 一个人的姓名、性别和年龄都是这个人的私有属性
     */
    private String name;
    private String sex;
    private int age;
    /*
     * setter()、getter()是该对象对外开放的接口
     */
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

This的用法

采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突.

public void setAge(int age) {
    if (age > 120) {
        System.out.println("ERROR:error age input...."); // 提示错误信息
    } else {
        this.age = age;
    }
}
public String getSexName() {
    if ("0".equals(sex)) {
        sexName = "女";
    } else if ("1".equals(sex)) {
        sexName = "男";
    } else {
        sexName = "人妖";
    }
    return sexName;
}

成员变量和局部变量

区别:

1)类中的书写位置不同

成员变量:在类中,方法外

局部变量:在方法定义中或者方法声明上

2)jvm内存位置不同

成员变量:在堆内存中

局部变量:在栈内存中

3)生命周期不同:

成员变量:随着对象的创建而存在,随着对象的创建完毕并且使用完

等待垃圾回收器回收(不会立即回收)而消失!

局部变量:随着方法调用而存在,随着方法调用结束而消失

4)初始化值不同:

成员变量:存在系统默认初始化,也可以显示初始化

局部变量:总之:在使用局部变量之前,必须赋值,不赋值不行!

//定义一个类Variable
class Variable{
	//成员变量
	int num ; //系统默认初始化就是0
	
	public void show(String y){ //y
		//int x = 100 ; //x  局部变量
		int x ; 
		x = 100 ;
		System.out.println(x+y) ;
	}
}



//测试类
class VariableDemo{
	
	public static void main(String[] args){
		//访问show方法
		//创建Variable类对象
		Variable v = new Variable() ;
		System.out.println(v.num) ;
		v.num = 100 ;
		System.out.println(v.num) ;
		v.show("hello") ;
		
	}
}

成员方法和构造方法

1.成员方法

有返回值类型,最后需要return相应类型的值;

若返回值类型为void(无返回值),则可以不写return;

成员方法名和类名不能相同

//成员方法
public String getName() {//成员方法名和类名不能相同
    return name;//有返回值
}
 
public void setName(String name) {
    this.name = name;//无返回值
}

系统不会自动添加成员方法,需要什么成员方法根据特定的功能来写,主要是用于完成特定方法。

1.例如添加get和set方法

//成员方法
public String getName() {//成员方法名和类名不能相同
    return name;//有返回值
}
 
public void setName(String name) {
    this.name = name;//无返回值
}

2.例如添加动物关于吃的方法(吃只是随便例了一个动物的共有的方法)

普通成员方法是由创建好的对象调用,可以调用多次

public void eat(){
    System.out.println("吃的方法");
}

PS当类实例化一个对象时会自动调用构造方法,它和其他方法一样也可以重载。

2.构造方法:

一种特殊的方法,方法名和类名相同,没有返回值类型(没有return)

//无参构造方法
public Animal() {

}

如果没有写构造方法,系统会自动添加一个无参构造方法

对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。

public class Test01 {
    public static void main(String[] args) {
        Animal animal = new Animal();//创建一个动物类对象时,有两个选择
    }
}

在创建对象时被调用的,一个对象建立,只调用一次相应构造函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周不要掉头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值