【JavaSE知识总结二】面向对象

这篇博客详细介绍了Java的面向对象概念,包括面向对象的引入、三大特征(封装、继承、多态),并深入讲解了类与对象、构造方法、封装、static关键字、继承和多态的应用。还提供了丰富的代码示例和练习,帮助读者理解Java面向对象编程。
摘要由CSDN通过智能技术生成

二十、面向对象

面向对象的引入

为了更好的了解面向对象思想,我们可以先了解一下面向过程.
面向过程是一种编程思想,顾名思义,面向过程注重的是过程,它在完成一些事的是时候,都需要亲力亲为.
面向对象也是一种编程思想,但是面向对象更符合我们现实生活中的思考,它把我们从执行者变成了指挥者,让处理问题变得更简洁
比如:
	(1)把大象放入冰箱这件事
用面向过程思想解决:注重过程;怎么解决
	分为三步
		第一步:把冰箱门打开
		第二步:把大象放进去
		第三步:把冰箱门关上
但是面向对象思想:注重结果;谁去解决
	谁负责把对象装进去
此时不难看出,使用面向对象思想以后,我们干这件事的时候身份有执行者变成了指挥者,干这件事的主体并不是我们自己了.
	(2)洗衣服这件事,
用面向过程思想:
	需要思考过程:
		第一步:把脏衣服脱下来
		第二步:打开洗衣机
		第三步:把衣服放进去
		第四步:放入洗涤剂
		第五步:关闭冰箱门
用面向对象思想:只需要找到一个对象,让她负责把脏衣服洗干净即可
可以看的出来:面向对象思想完成事件的时候,更简洁

什么是面向对象

综上所述,那么什么是面向对象呢?面试官要是问起来要怎么回答呢?
	答:面向对象是一种编程思想,又叫oop,全称:Object Oriented Programming.它比较符合我们现实生活中的思考方法,让我们的身份从执行者转变成了指挥者,也让事物变得更简洁了,比如,洗衣服,运用面向对象思想时,就不需要考虑具体应该怎么洗了,而是考虑由谁去洗.再比如,吃饭点菜的时候不需要考虑菜是怎么做的,只需要点想吃的菜即可,这些都是面向对象.

面向对象的三大特征

封装、继承、多态

类和对象

什么是类
1.类是java中最基本的单元,是描述一组事物的属性和行为的的集合.
2.类和事物是一一对应的;
3.类在现实中并不存在,它只是现实事物中的一种抽象的表示
类中的成员
类中的成员有:
	成员变量
	构造方法
	成员方法(我们一般说的成员方法都是非静态的)
对象
对象是具体的类
	通过代码体现:
		类名 对象名 = new 类名();
		对象名.成员变量 = 赋值;
					......
		对象名.成员方法();
					.......

例如:现在有一个学生类

//学生类
class Student{
   
	//成员变量
	String name ;
	int age ;
	//成员方法
	public void study(){
   
		System.out.println("学生应该好好学习");
	}
}

这时需要一个测试类

class Test{
   
	//编写一个主方法
	public static void main(String] args){
   
		//创建一个学生对象
		Student student = new Student() ;
		//给对象成员赋值
		student.name = "张三" ;
		student.age = 17 ;
		//调用成员方法
		student.study() ;
	}
}
类和对象的关系
类和对象是相辅相成的
我们先创建类,再通过类创建对象
我们可以通过类来创建多个对象
类是抽象的,对象是具体的
练习:类的创建和使用

一个手机,它的属性有品牌,价格,颜色,内存;方法有打电话,发短信,打游戏,

创建类和对象

手机类:

/*
*手机有品牌(brand),价格,颜色,内存等属性,
* 手机可以打电话,发短信,打游戏等行为,
* 请使用面向对象的方式描述手机并且进行测试
* */
public class Phone {
   

    //定义成员变量
    String brand ; //品牌
    int price ; //价格
    String color ; //颜色
    String memory ; //手机内存

    //定义成员方法
    //打电话方法
    public void callPhone(String name){
   
        System.out.println("用" + brand +"打电话给" + name);
    }

    //发短信的方法
    public void sendMsg(String name) {
   
        System.out.println("发短信给" + name);
    }

    //玩游戏的方法
    public  void playGame(String game) {
   
        System.out.println(brand + "打" + game + "很流畅");
    }
}

测试类:

package com.qf.oop;

public class phoneTest {
   

    //编写一个主方法
    public static void main(String[] args) {
   
        Phone phone = new Phone() ;

        //给成员变量赋值
        phone.brand = "荣耀V20" ;
        phone.price = 1599 ;
        phone.color = "黑色" ;
        phone.memory = "258G" ;

        System.out.println(phone.brand + "----" + phone.price + "----" + phone.color +"----" + phone.memory);

        //调用Phone的方法
        phone.callPhone("贾玲");
        phone.sendMsg("贾宝玉");
        phone.playGame("王者荣耀");
    }
}

对象在内存中的储存
例如:Student s = new Student();
	1.在方法区中生成.class文件和main方法
	2.然后main方法进栈,在栈内存中开辟空间
	3.在栈内存中为s开辟空间
	4.在堆内存中为new Student()开辟空间
	5.给Student()中的成员分配初始化值,并生成地址值
	6.Student()中的地址值赋值给Student s
	7.s会指向Student()的地址值

成员变量和局部变量的区别

区别一:
	书写位置不同:
		成员变量:写在类中方法外
		局部变量:写在方法的定义或方法的声明中
区别二:
	内存中的位置不同:
		成员变量:储存在堆内存中
		局部变量:储存在栈内存中
区别三:
	生命周期不同:
		成员变量:随着对象的创建而产生,随着对象的创建完毕,等待垃圾回收器的回收而消失("不会马上消失");
		局部变量:随着方法的调用而产生,随着方法的调用结束而消失
区别四:
	初始化值不同:
		成员变量:存在系统默认初始值,可以赋值,也可以不赋值;
			一般是通过对象名.成员变量 = 赋值;来完成赋值操作
		局部变量:在使用前必须赋值:否则会报错"可能尚未初始化";

方法中的形式参数问题(面试题)

一、方法中的形式参数如果是基本数据类型
	如果是基本数据类型,形式参数的改变不会影响实际参数
二、方法中的形式参数如果是引用数据类型(数组,类,接口)
	如果是引用数据类型,形式参数的改变会影响实际参数,因为它们传递的是空间地址值
三、方法中的形式参数如果是String类型的参数,
	String作为引用数据类型,是一种特殊的引用类型
	它作为形式参数的效果个基本类型是一致的,形式参数的改变不会影响实际参数
四、方法中的形式参数如果是类
	如果当前形式参数是类,调用方法时实际参数需要传递的是当前类的具体的对象(即;new一个类的方法出来,当类的实际参数)

匿名对象

匿名对象即没有名字的对象
我们常见的格式是:类名 对象名 = new 类名;//有名字的对象
匿名对象的格式:
	new 类名();
匿名对象的好处:
	1.匿名对象可以节省空间,因为没有栈内存中的变量指向堆内存的地址
	2.匿名对象可以作为参数传递
注意事项:
	在实际开发中,匿名对象不要多次使用,使用一次就好,
	使用完毕后会马上被垃圾回收器回收;因为没有栈内存中的变量指向堆内存的地址

封装

封装是指隐藏对象的属性和实现方法,保证它的安全性
	然后提供对外的公共访问类set成员变量()和get成员变量();
封装的好处:
	提高重用性,提高安全性
private关键字
private关键字是一个权限修饰符
	用于修饰成员变量和成员方法
被private关键字修饰的成员只能在本类中使用
this关键字
this关键字代表了当前类对象的地址值的引用
	即:代表了当前类的成员(成员方法或者成员变量)
作用:就是当成员变量和局部变量一致时,为了区分,在成员变量前加this.;
格式:
	this.变量名(成员变量名);
	this.方法名()[当前类的成员方法]

构造方法

构造方法是一种方法,是一种特殊的方法
它的特殊包括以下三点:
	1.构造方法的方法名和类名相同
	2.没有具体的返回值类型,没有void
	3.可以有形式参数
构造方法可以重载
	即:同一个类中,方法名一致,但是形式参数不同的方法
	方法重载与返回值类型和访问修饰符无关
构造方法的目的:
	目的就是给成员变量赋值的
构造方法注意事项
1.构造方法没有返回值类型,也没有void,不能随意定义构造方法
2.当我们的事物类中没有写任何构造方法时,系统会默认给我们提供一个构造方法
	但是,如果我们写了有参的构造方法以后,系统不会再提供构造方法,这时再使用无参构造创建对象的时候,会报错,因此,学过构造参数以后,无参构造就要一直定义

给成员变量初始化

给成员变量初始化的方法有两种
第一种:
	通过无参构造方法,通过new对象,然后给setxxx赋值,最后通过getxxx()获取值
第二种:
	通过有参构造方法,通过new对象直接给赋值,然后通过getxxx()获取值
练习:封装的使用

一个手机,它的属性有品牌,价格,颜色,内存;方法有打电话,发短信,打游戏,把手机类私有化封装起来
创建类和对象
创建一个手机类

public class Phone {
   

    //定义成员方法
    private String brand ; //品牌
    private int price ; //价格
    private String color ; //颜色
    private String memory ; //内存

    //构造无参方法
    public Phone() {
   
    }

    //构造有参方法
    public Phone(String brand, int price, String color, String memory) {
   
        this.brand = brand;
        this.price = price;
        this.color = color;
        this.memory = memory;
    }

    //给品牌赋值
    public void setBrand
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值