Java 面向对象和封装全面梳理总结

关于面向对象和封装的个人理解

类和对象

类:对事物的一种描述(具有共同属性和行为的事物的抽象),例如手机,属性:品牌价格,行为:玩游戏,刷vx;

对象:客观存在(在java中体现就是mian方法里面用类定义一个对象,然后用对象去调用方法或者调用成员变量)

二者关系:类为属性行为抽象,对象则为实体。

对象内存图理解:堆内存开辟空间,成员变量出现 并产生默认初始化值,将对象地址值记录以便于通过对象名调用成员变量。

成员变量和局部变量的区别:类中位置不同,内存中位置不同,生命周期不同,初始化值不同(成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)。

封装

private关键字:被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作(get,set方法)

this关键字:this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)。

封装理解: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问(private修饰和get,set方法)

封装的好处以及作用: 把代码用方法进行封装,提高了代码的复用性, 通过方法来控制成员变量的操作,提高了代码的安全性。

难题汇总

银行账户

package test3;

public class bank {
    public static void main(String[] args) {
        //在测试类Bank中创建银行账户类对象和用户类对象,
        // 并设置信息,与显示信息
        Customer customer = new Customer("李华","123456789","987456321","新华小区");
        Account  account = new Account(1111115646,1000000,customer);
        customer.say();
        account.withdraw( 10000 );
        account.save( 9999999 );
        System.out.println(customer.say());
        System.out.println(account.getinfo());
        if (account.withdraw( 10000 )==true){
            System.out.println("取钱成功");
            System.out.println("余额还有"+account.getBalance());
        }else{
            System.out.println("取款失败");
        }
        if (account.save( 444444 )==true){
            System.out.println("存款成功");
            System.out.println("余额还有"+account.getBalance());
        }else{
            System.out.println("存款失败");
        }
    }
}
package test3;
/*2.定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer
银行账户类Account有方法:(1)getInfo(),返回String类型,返回卡的详细信息
(2)取钱方法withdraw(),参数自行设计,如果取钱成功返回true,失败返回false
(3)存钱方法save(),参数自行设计,如果存钱成功返回true,失败返回false
 其中Customer类有姓名、身份证号、联系电话、家庭地址等属性    Customer类有方法say(),
 返回String类型,返回他的个人信息。​在测试类Bank中创建银行账户类对象和用户类对象,
 并设置信息,与显示信息*/
public class Account {
    private int cid ;
    private int balance;
    private Customer customer;

    public Account(Customer customer) {
        this.customer = customer;
    }

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        this.balance = balance;
    }
    public Account(String s, int balance, Customer customer){

    }
    public Account(int cid,int balance, Customer customer){
        this.cid=cid;
        this.balance=balance;
        this.customer=customer;
    }

    //(1)getInfo(),返回String类型,返回卡的详细信息  号cid,余额balance,所属用户Customer
    public String getinfo(){
        String info = "卡号"+cid+"\n余额"+balance+"\n用户"+customer.getName();
         return info;
    }
    //取钱方法withdraw(),参数自行设计,如果取钱成功返回true,失败返回false
    public boolean withdraw(int out_balance)
    {
        if (out_balance <= balance)
        {
            balance -= out_balance;
            return true;
        }

        return false;
    }

    //存钱方法save(),参数自行设计,如果存钱成功返回true,失败返回false
    public boolean save (int in_banlance){
        if (in_banlance >=0){
            balance += in_banlance;
            return  true;
        }
        return false;
    }

}

package test3;
//其中Customer类有姓名、身份证号、联系电话、家庭地址等属性
public class Customer {
    private String name;
    private String idcard;
    private String call;
    private String adress;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String isIdcard() {
        return idcard;
    }

    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }

    public String getCall() {
        return call;
    }

    public void setCall(String call) {
        this.call = call;
    }

    public String getAdress() {
        return adress;
    }

    public void setAdress(String adress) {
        this.adress = adress;
    }
    public Customer(){

    }
    public Customer(String name, String idcard,String call,String adress){
        this.name=name;
        this.idcard=idcard;
        this.call = call;
        this.adress=adress;
    }
    public String say(){
        String info = "姓名"+name+"\n身份证号"+idcard+"\n电话"+call+"\n地址"+adress;
        return info;
    }
}

理解类中引用类就是再写一个就行,不用想的太复杂。

坐标点

package test2;
//定义一个类,用于描述坐标点
//
//​           0——————>X
//
//​          |
//
//​          |
//
//​          |                  P(X,Y)
//
//​          |
//
//​          |
//
//​          Y
//
//
//
//(1)具有计算当前点到原点距离的功能
//
//(2)求到任意一点(m,n)的距离
//
//(3)求到任意一点(Point p)的距离
//
//(4)具有坐标点显示功能,显示格式(x,y)
//
//(5)提供无参的构造器和一个有参的构造器
public class test2 {
    public static void main(String[] args) {
        point w=new point(10,20);
        w.oxy();
        w.mnxy( 66,77 );
        w.ponitp( 14,16 );
        w.show();
    }
}
public class point {
    int x ;
    int y ;
    int m ;
    int n ;
    public int getM() {
        return m;
    }

    public void setM(int m) {
        this.m = m;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
 public point(){

 }
 public point(int x , int  y){
        this.y=y;
        this.x = x;
 }

 public void  oxy(){
     System.out.println(Math.sqrt( x*x+y*y ));
 }
 //(2)求到任意一点(m,n)的距离
    public void mnxy (int m , int n ){
        this.m=m;
        this.n=n;
        System.out.println(Math.sqrt( ((m-x)*(m-x)+(n-y)*(n-y)) ));
    }
//(3)求到任意一点(Point p)的距离
    public void ponitp (int z , int k ){
        System.out.println(Math.sqrt( ((z-x)*(z-x)+(k-y)*(k-y)) ));
    }

//(4)具有坐标点显示功能,显示格式(x,y)
    public void show(){
        System.out.println( "("+x+","+y+")" );
    }

}

学生随机数排序

// An highlighted block
var foo = 'bar';package test1;
//定义类Student,包含三个属性:学号number(int),年级state(int),成绩 score(int)。
//创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
//问题一:打印出3年级(state值为3)的学生信息。
//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
//提示: 1) 生成随机数:Math.random(),返回值类型double;  (Matn为工具类)([0,1})
//	  2) 四舍五入取整:Math.round(double d),返回值类long 型
public class demo5 {
    public static void main(String[] args) {
        Students [] stu = new Students[20];
        for (int i = 0; i < stu.length; i++) {
            //给数组元素赋值
            stu[i]=new Students();
            //给Student的对象的属性赋值
            stu[i].number = i +1;//学号
            stu[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);//(6  + 1));//年级[1,6]
            stu[i].score = (int)(Math.random() *  (100 - 0 + 1));//(100 - 0 + 1));//成绩[0,100]
        }
        //遍历学生数组
        for (int i = 0; i < stu.length; i++) {
            //System.out.println(stu[i].number + "," + stu[i].state + ","
            //		+ stu[i].score);
            System.out.println(stu[i].info());
        }
        System.out.println("*******************");
        //问题一:打印出3年级(state值为3)的学生信息。
        for (int i = 0; i < stu.length; i++) {
            if (stu[i].state == 3) {
                System.out.println(stu[i].info());
            }
        }
        System.out.println( "\t");
        //问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息。
        for (int i = 0; i < stu.length - 1; i++) {
            for (int j = 0; j < stu.length - 1 - i; j++) {
                if(stu[j].score > stu[j + 1].score){
                    //如果需要换序,交换的是数组的元素,Student对象!!!
                    Students temp = stu[j];
                    stu[j] = stu[j + 1];
                    stu[j + 1] = temp;

                }
            }
        }
        for (int i = 0; i < stu.length; i++) {
            System.out.println(stu[i].info());
        }
    }
}
public class Students {
    //学号number(int),年级state(int),成绩 score(int)。
     int number;
     int state;
      int  score;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
    public String info(){
        return "学号:" + number + ",年级:" + state + ",成绩" + score;
    }

到此这篇关于Java 面向对象和封装全面梳理总结的文章就介绍到这了,更多相关Java 面向对象 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一篇文章带你入门Java封装

    目录 什么是封装 如何实现封装 代码展示 构造方法 注意点: 代码展示 总结 封装的优点 什么是封装 Java中的封装是将数据(变量)和作用于数据(方法)的代码作为一个单元包装在一起的机制. 在封装中,类的变量将从其他类隐藏,并且只能通过当前类的方法访问. 如何实现封装 可以分为两步: 第一步:将类的变量声明为private. 第二步:提供公共set和get方法来修改和获取变量的值. 代码展示 public class User { private String name; private in

  • Java 封装的使用详解

    目录 1. 基本介绍 2. 封装介绍 3. 封装的理解和好处 4. 封装的实现步骤 (三步) 5. 快速入门案例 6. 将构造器和 setXxx 结合 7. 练习 1. 基本介绍 面向对象编程有三大特征:封装.继承和多态. 2. 封装介绍 3. 封装的理解和好处 4. 封装的实现步骤 (三步) 5. 快速入门案例 package com.xdr630.encap; public class Encapsulation01 { public static void main(String[] ar

  • JAVA回顾:封装,继承,多态

    目录 知识点回顾 封装 继承 super注意点: Vs this: 前提: 构造方法 多态 总结 知识点回顾 封装 封装(有时称为数据隐藏)是与对象有关的一个重要概念.从形式上来看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式.对象中的数据称为实例域,操作数据的过程称为方法.对于每个特定的类实例(对象)都有一组特定的实例域值.这些值的集合就是这个对象的当前状态.无论何时,只要向对象发送一个消息,它的状态就有可能改变. 实现封装的关键在于绝对不能让类中的方法直接地访问

  • Java基础第四篇 封装与接口

    目录 1.封装与接口 2.对象成员的封装 3.类的封装 4.总结 前言: 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对象可以有状态和动作,即数据成员和方法. 到现在为止,数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对象的数据成员和方法. 1.封装与接口 封装(encapsulation)是计算机常见的术语,

  • Java面向对象的封装特征深度解析

    目录 面向对象三大特征 封装 private关键字--实现类封装 访问器方法和更改器方法 包--类的集合 导入包 从人的角度理解包 不加访问权限--实现包封装 总结 在上一篇文章中,我们了解了面向对象的基础内容,这一篇将会更加深入地了解面向对象的特征. 面向对象三大特征 面向对象语言有三大特征: 封装 继承 多态 封装 对一个类实现封装,意味着限制其它类对该类数据的访问. 简单来讲,封装就是隐藏数据,就是保护对象的数据.对象,听起来总是那么地抽象,为了更好地理解封装,我将对象具体指向人,从人的角

  • 详细理解JAVA面向对象的封装,继承,多态,抽象

    目录 类和对象的使用(面向对象思想落地的实现): 子类对象实例化的全过程 1.从结果上看:(继承性) 2.从过程上来看: 1.封装性 2.继承性 继承性的好处: 3.多态性 虚拟方法调用 4.抽象性 1.抽象类的特点: 2.天生的父类:抽象类 3.抽象方法 总结 创建类的对象 = 类的实例化 = 实例化类 类和对象的使用(面向对象思想落地的实现): 1.创建类,设计类的成员 2.创建类的对象 3.通过"对象.属性"或"对象.方法"调用对象的结构 如果创建了一个类的多

  • 新手初学Java继承、封装与多态

    目录 面向对象的三大核心特性 封装 继承 单继承 继承的优缺点 super关键字 super调用父类构造方法 super访问父类成员 super和this的区别 多态 instanceof关键字 方法重载 方法重写 抽象类 接口 定义接口 实现接口 总结 面向对象的三大核心特性 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率.面向对象程序设计有以下优点. 可重用性:代码重复使用,减少代码量,提高开发效率.下面介绍的面向对象的三大核心特性(

  • 一篇文章带你深入了解Java封装

    目录 如何实现封装 代码展示 构造方法 注意点: 代码展示 总结 如何实现封装 可以分为两步: 第一步:将类的变量声明为private. 第二步:提供公共set和get方法来修改和获取变量的值. 代码展示 public class User { private String name; private int age; private int id; private String address; public int getAge(){ return age; } public String

  • Java 面向对象和封装全面梳理总结

    关于面向对象和封装的个人理解 类和对象 类:对事物的一种描述(具有共同属性和行为的事物的抽象),例如手机,属性:品牌价格,行为:玩游戏,刷vx: 对象:客观存在(在java中体现就是mian方法里面用类定义一个对象,然后用对象去调用方法或者调用成员变量) 二者关系:类为属性行为抽象,对象则为实体. 对象内存图理解:堆内存开辟空间,成员变量出现 并产生默认初始化值,将对象地址值记录以便于通过对象名调用成员变量. 成员变量和局部变量的区别:类中位置不同,内存中位置不同,生命周期不同,初始化值不同(成

  • 浅谈java面向对象(类,封装,this,构造方法)

    无论面向对象还是面向过程, 这俩都是解决问题的思路而已, 只是角度不同. 面向过程: 强调解决问题的每一个步骤都亲力亲为,每一个细节都自己手动实现. 面向对象: 使用特定功能对象去解决特定的问题, 每一个细节不需要关注,只需要创建对应的对象即可. 面向对象是基于面向过程的 类和对象及他们的关系 类: 具有相同特征和行为(功能)的事物的统称 , 是一个抽象概念 对象: 这类事物中某个确定的个体 类和对象的关系 一个类可以创建多个对象 , 类是对象的抽象, 对象是类的实例. 描述一个事物---->

  • Java面向对象的封装你了解吗

    目录 面向对象思想之封装 什么是封装呢? 封装的好处意义 getter方法和setter方法 toString方法 总结: 面向对象思想之封装 或许大家都听说过java是纯面向对象语言,面向对象思想也就是我们常说的OOP,我们听说最多的思想就是继承,封装,多态,今天我们来讲一讲封装. 什么是封装呢? 封装就是一种将数据和操作数据的方法进行有机结合,一种函数抽象类的接口实现了对细节的封装和隐藏,使得我们只需要调用对外开放的公共接口去实现与对象的交互.我们可以把封装理解为一种保护的屏障,需要一些严格

  • Java面向对象编程(封装/继承/多态)实例解析

    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容. 封装 封装一个Teacher和Student类 package com.hz.test; public class Teacher { private String name; private String majorDirection; private String teachCourse; private int teachAge; public Teacher() { super(); } public Teacher(Stri

  • Java面向对象之成员隐藏与属性封装操作示例

    本文实例讲述了Java面向对象之成员隐藏与属性封装操作.分享给大家供大家参考,具体如下: 关于这个功能的优点我现在体会还不深,只是从书本中找到了面向对象编程的一个原则--尽量让数据私有.如果需要对数据的信息进行修改或者获取,不会直接修改成员信息,而是通过方法的调用来实现. 写如下代码: packagefengzhuang; class HuaShanPai { private String zhangmen; private int dizishu; private String gongfu;

  • JAVA面向对象 封装原理及实例解析

    这篇文章主要介绍了JAVA面向对象 封装原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 抽象 去定义一个类的时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模板).这种研究问题的方法称为抽象. 修饰符 Java提供四种访问控制修饰符号控制方法和变量的访问权限: Ⅰ.公开级别:用pubilc修饰,对外公开 Ⅱ.受保护级别:用protected修饰,对子类和同一个包中的类公开 Ⅲ.默认级别:没有修饰符号,向同一

  • Java面向对象程序设计:类的定义,静态变量,成员变量,构造函数,封装与私有,this概念与用法详解

    本文实例讲述了Java面向对象程序设计:类的定义,静态变量,成员变量,构造函数,封装与私有,this概念与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我之前学习的时候有些书籍不是同样的说法,书看多了,我就习惯了不同情况下用不同的说法] 首发时间:2018-03-22 什么是面对对象: 面向对象强调行为处于

  • Java全面分析面向对象之封装

    目录 什么是封装呢 封装的好处意义 getter方法和setter方法 toString方法 面向对象封装之包 自定义包 什么是封装呢 封装就是一种将数据和操作数据的方法进行有机结合,一种函数抽象类的接口实现了对细节的封装和隐藏,使得我们只需要调用对外开放的公共接口去实现与对象的交互.我们可以把封装理解为一种保护的屏障,需要一些严格的接口进行控制,我们可以修改自己实现类的内部结构的代码,但是不可以修改那些公共接口.这就提供更好的安全性. 封装的好处意义 好的封装能够减少耦合度 能够对成员变量更精

随机推荐