Java 面向对象

来源:互联网 发布:淘宝购买数量点到1000 编辑:程序博客网 时间:2024/06/09 23:02

什么是面向对象?

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

成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 0
原创粉丝点击