JAVA面向对象——类与对象学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文的主要内容包括以下三点:

  • 为什么要使用面向对象语言?
  • 面向对象编程的基本要素(类与对象)
  • 面向对象编程的特性(封装性、继承性、多态性)
  • JAVA语言下,类与对象的具体创建过程

一、为什么要使用面向对象语言?

随着软件规模的扩大,面向过程的语言在解决对应用的维护、拓展、复用等方面的问题时,逐渐力不能及,由此人们开发出了面向对象的思想。
并且,在现实生活中,一个动作或者行为的发出,往往是属于某个具体的“主体”对象的,在解决具体问题时,面向对象能够更加贴合现实逻辑地,指定做出该行为的“主体”是谁。
这无疑更加贴合人们的思维模式,使得开发、编程人员更容易编写出更易维护、更易拓展、更易复用的程序,更利于人们创造性的施展。

二、面向对象编程的基本要素

1.类(class)

类是对我们世界中的某一类事物的共有的属性与行为的抽象,是对具有相同、相似的属性、特征、行为或功能的一类事物的抽象信息描述。例如人类的类,是对所有人类的共同具有的属性(性别、年龄等)与行为(吃饭、喝水、睡觉等)的抽象,是对其规律性的描述与总结。

2.对象(object)

用类声明的变量即为对象。正如其英文的含义所示,对象是指我们人类世界中某个具体的事物,像某一个具体的人(张三、李四),具体的某件事(吃饭、喝水、睡觉)。

3.面向对象编程的主要特性

面向对象编程的特征主要体现在三个方面,分别是:封装性、继承性、多态性。

1.继承性

继承性是指,作为子类可以继承父类的属性与方法,即继承父类所具有的数据以及对数据的操作,同时子类又不仅仅能拥有父类的属性与方法,还能够增添属于子类独有的属性与行为。

  • 关键字:extend
  • 格式:public class 类名(子类、派生类、超类) extends 类名(父类、基类){ }
  • 注意:JAVA中只能实现单继承(即一个子类只能继承一个父类),但是可以进行多层继承(即一个类可以继承某个类的子类)

代码如下(示例):

public class Call {
    public void callSomebody(String phoneNum){
        System.out.println("我在打电话喔,呼叫的号码是:" + phoneNum);
    }
}

// Call类父类
class SendMessage {
   public void sendToSomebody(String phoneNum){
       System.out.println("我在发短信喔,发送给 :" + phoneNum);
  }
}
//SendMessage父类
public class Phone {
private class MyCall extends Call{

}
private class MySendMessage extends SendMessage{

}

private MyCall call = new MyCall();
private MySendMessage send = new MySendMessage();

public void phoneCall(String phoneNum){
call.callSomebody(phoneNum);
}

public void phoneSend(String phoneNum){
send.sendToSomebody(phoneNum);
}

public static void main(String[] args) {
Phone phone = new Phone();
phone.phoneCall("110");
phone.phoneSend("119");
}
}

// Phone 类中 二个方法继承父类实现多继承

2.封装性

什么是封装?

封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者函数)来访问内部信息或者数据。

封装的意义

封装的意义主要在确保整个系统的安全性上,当然,这里的安全性中,很大一部分并不是指,所谓“防止黑客入侵”的安全性,倒是更偏向“正确性”,即输入输出的正确性、合法性。下面对其意义进行归纳:

1.有利于参数的校验与整合

以下述代码为例:

public class User{
    String user_name;
    int age;
    
    public void setName(String user_name){
        if(user_name.length () < 8){
            System.out.println ("账号字符数量不足8个字符!!");
            return;
        }
        this.user_name = user_name;
        
     public void setAge(int age){
        if(age < 0){
            System.out.println ("年龄不能为负数!!");
            return;
        }
        this.age = age;
    }

在User类中,我们写了两个方法来设置Name属性与Age属性,我们要求用户的年龄(Age)属性不能为负数,用户账号(Name)属性应大于八位,若不对属性进行封装,用户便能直接修改其属性,我们便无法确保相应的属性符合我们的格式要求。换句话说,封装就是在类的属性与调用、修改属性的方法之间设定了一定的缓冲,只有符合我们要求的对属性数据的增删改查,才会被执行。

2.将读写进行分离

读写分离就是避免对属性数据进行写操作而导致的数据不一致的情况,这样可以减轻系统运行的压力。因为进行写操作更耗时,所以如果不进行读写分离的话,写操作将会影响到读操作的效率。

3.防止sql注入

SQL注入是比较常见的网络攻击方式之一,在客户端在向服务器发送请求的时候,sql命令通过表单提交或者url字符串拼接传递到后台持久层,最终达到欺骗服务器执行恶意的SQL命令;它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。
例如:

String user_id = "123456";
String sql = "select * from user where userid = " + userid;

当user_id ="123456"时,我们能够查询user_id为123456的用户的信息数据,但是当用户进行恶意攻击时,例如userid = “” or 1 =1 。
这时候sql就变成了下面代码:

select * from user where userid = "" or 1 = 1;

即为查询出所有数据,更严重者直接删表删库。
通过封装,我们能够有效的对输入的命令的格式进行限制,在一定程度上减少了SQL注入的漏洞。

3.多态性

什么是多态性?

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

多态性实现(举例)

public class Figure {
    double dim1;
    double dim2;
    Figure(double d1, double d2) {
        // 有参的构造方法
        this.dim1 = d1;
        this.dim2 = d2;
    }
    double area() {
        // 用于计算对象的面积
        System.out.println("父类中计算对象面积的方法,没有实际意义,需要在子类中重写。");
        return 0;
    }
}
//创建继承自 Figure 类的 Rectangle 子类
//该类调用父类的构造方法,并且重写父类中的 area() 方法
public class Rectangle extends Figure {
    Rectangle(double d1, double d2) {
        super(d1, d2);
    }
    double area() {
        System.out.println("长方形的面积:");
        return super.dim1 * super.dim2;
    }
}

4.类与对象的具体定义过程(代码实现)

1. 类的定义

1.1 关键字

关键字:class

1.2 格式

class 类名{ }

如下示例:

//创建User类
public class User{}

1.3类的内容

(1)成员属性
  • 属性:所有对象都有这个属性,但是值不一样
  • 简单的识别方法:在类中,能用简单的变量来进行表达的即为成员的属性。
  • 注:Java 中创建对象的时候,会给属性变量赋初始值 。(字符串:null 数字类型)
    如下示例:
public class User{
    /**
     * 属性:所有对象都有这个属性,但是值不一样
     * 1: Java 中创建对象的时候 会给属性变量赋初始值 字符串:null 数字类型:0
     */
    String user_name;
    String user_pwd;
    int age;
    int user_id;
    double score;
    long time;}
(2)成员方法
  • 成员方法,又或者说函数,即为对实现对功能的描述
  • 简单识别方法:实际上需要一段逻辑代码。
  • 构建格式:返回值类型 方法名(参数列表){ 方法体 }

如下示例:

public class User{
    String user_name;
    String user_pwd;
    int age;
    int user_id;
    double score;
    long time;

    public void setTime(long time){
        this.time=time;
    }

    public String getTime(){
        Date date = new Date (time);
        return date.toString ();
    }
    //构造方法
     public User(int age){
        // this 是当前代码执行创建的引用对象
        this.age = age;
    }
    //对构造的重载,如此即可使对象创建时更为简便的设置属性参数
    public User(String user_name, String user_pwd, int age, double score){
        this.user_name = user_name;
        this.user_pwd = user_pwd;
        this.age = age;
        this.user_id = (int) (System.currentTimeMillis () & 65535);
        this.score = score;
    }
}

2.对象的创建

2.1 关键字

关键字: new

2.2 创建格式

类名 对象名 = new 类名()
如下示例:

User user1 = new User ("admin", "admin123", 20, 860)
//创建了一个名为“user1”的User类对象
//其中user_name属性为“admin”,user_pwd属性为“admin123”,age属性为20,score属性为860

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了JAVA面向对象中类与对象部分的简单知识,既是对自身学习的一种记录,也是一种知识的分享。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值