Java 面向对象

什么是面向对象?

面向对象就是使用对象进行程序设计,简写

成OOP(Object Oriented Programming)。
这里写图片描述

面向对象的三大原则

  • 封装、继承、多态

封装

  • 对象同时具有属性和方法两项特性
  • 对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,不能分割

从对象抽象出“类”

把相同的或相似的对象归为一类的这个过程就是抽象,所以,抽象就是分析问题的方法;

抽象的基本原则:
  • 只关心主要问题,而不关心次要问题;
  • 只关心主要矛盾,而不关心次要矛盾;
  • 只关心相同的东西,而不关心不同的东西;
  • 只关心问题是什么,能够完成什么,而不关心怎样去完成。
  • 抽象的过程其实就是面向对象编程的核心思想。

面向对象(OO)的优点

便于程序模拟现实世界中的实体
  • 用“类”表示实体的特征和行为
隐藏细节
  • 对象的行为和属性被封装在类中,外界通过调用类的方法来获得,不需关注内部细节如何实现
可重用
  • 可以通过类的模板,创建多个类的对象

Java 方法定义

利用访问权限,加强对Java的安全性

为了避免从类外部直接访问类成员而造成的数据损坏,Java对类成员的访问制定了约束;

  • 关键字public和private是访问修饰符,用来说明某个成员是否可以从类外部进行访问;
  • public修饰的成员可以在任何地方进行访问,不受任何约束;
  • private修饰的成员只能够被本类中的其它成员访问,而不能从类的外部进行访问。

修饰符 + 返回值类型 + 方法名 (参数类型1 参数1……)

public:访问控制符,控制该方法的访问范围
返回值类型:当前方法如果有返回值得话,需要添加对应的返回值类型
  • void 系统默认无参,所以是没有返回值的,没有return语句
方法名:自己定义的(顾名思义)名字
参数列表:从外部接收用户输入()中的参数

加上访问修饰符有时候可能会给操作数据带来不便,但可以在很大程度上保证数据的安全

  • 一般地,我们会将成员属性声明为private,而将成员方法声明为public,但这样做并不是绝对的
  • 有时候,类外部可能要操作到某些私有数据成员,那么就可以增加一个公有的方法,再由这个方法来操作私有数据,避免因类外部的误操作而造成的数据损坏
  • 因为main方法要由类外部的虚拟机来调用,所以main方法必须声明成public

    class Student {  //定义学生类
      private String name;   //姓名,私有
      private int age;       //年龄,私有
      private float weight;  //体重,私有
    
      public void setName(String n) {   //为姓名赋值的方法,公有
        name = n;
      }
      public void setAge(int a) {       //为年龄赋值的方法,公有
        age = a;
      }
      public void setWeight(float w) {  //为体重赋值的方法,公有
        weight = w;
      }
      public void display() {           //将所有信息打印出来的方法,公有
        System.out.println("姓名:" + name + ",年龄:" + age + ",体重:" + weight);
      }
      public void dining() {……}         //吃饭的方法,公有,代码略
      public void walk() {……}           //走路的方法,公有,代码略
    }
    
    public class Test {
      public static void main(String[] args) {
        Student std = new Student();  //实例化学生类对象
        std.setName("张三");           //为姓名赋值
        std.setAge(18);               //为年龄赋值
        std.setWeight(55);            //为体重赋值
        std.dining();                 //调用吃饭的方法
        std.display();                //将信息打印出来
      }
    }
    

this关键字

既然所有的对象都共用相同的成员方法,那么在不同的对象都调用同一方法时,它是怎么确定要使用哪个对象的数据成员呢?

  • 每个成员方法都有一个隐含的this引用,它总是指向调用它的对象;
  • 关键字this给出用于调用成员方法的对象的地址;
  • 每当调用成员方法时,编译器会向this分配调用该方法的对象的地址;
  • 可以像使用任何引用那样使用this。

构造方法

在上例中,只能逐个地为数据成员赋值,如果想在对象实例化的同时就初始化成员属性,就使用到了构造方法;

  • 构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用;
  • 请注意:构造方法没有返回值类型,也不能有返回值。
  • 正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员;
    构造方法的一般形式:

    访问控制符 类名(形参列表) {
    方法体
    }
    

    因为是由虚拟机来调用构造方法,所以构造方法一般应定义成public。

示例:

package com.hz.test;

import java.util.Arrays;

/**
 * @author ztw
 *
 */
public class Student {


private String name;
private int age;
private String[] courses;
private String interest;

public Student() {
    super();
}

public Student(String name,int age,String[] courses,String interest) {
    this.name = name;
    this.age = age;
    this.courses = courses;
    this.interest = interest;
}
public void setName(String name){
    this.name = name;
}
public String getName(){
    return name;
}

public void setAge(int age){
    if(age<0){
        System.out.println("年龄不能为负值");
    }else{
        this.age = age;
    }
}
public int getAge(){
    return age;
}

public void setCourses(String[] courses){
    this.courses = courses;
}
public String getCourses(){
    return Arrays.toString(courses);
}

public void setInterest(String interest){
    this.interest = interest;
}
public String getInterest(){
    return interest;
}

public String toString() {
    return "姓名=" + getName() + ", 年龄=" + getAge() + ", 课程=" + getCourses()
            + ", 兴趣=" + getInterest();
}
}

public static void main(String[] args) {
    String arr[] = {"阿斯达","是的","大概","太诱惑"};
    Student stu = new Student("张三",21,arr,"打球");
    Teacher tea = new Teacher("王五","阿斯达","阿斯达",99);
    System.out.println(stu);
    System.out.println(tea);
}
}
  • 每个对象在生成时都必须执行构造方法,而且只能执行一次;
  • 如果构造方法调用失败,那么对象也无法创建;
  • 不可以显式地直接调用构造方法;
  • 在没有定义构造方法的情况下,类会自动产生一个无参数的默认构造方法,这个- - 默认的构造方法什么都不做;
  • 一旦显式地定义了构造方法,默认构造方法自动消失。

总结

  • 对象由状态(属性)和行为(方法)组成;
  • 类是具有相同属性和方法的对象的集合;
  • 封装可以隐藏对象实现的具体细节;
  • 必须先实例化类的对象,才可以访问到其中的成员;
  • 成员运算符用于访问对象的成员;
  • 成员可以定义为公有,也可以定义为私有;
  • 构造方法一般用来初始化对象中的数据成员;
  • 如果不定义构造方法,将有默认的构造方法,一旦定义,默认的构造方法自动消失。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值