Java面向对象编程1

1、前言

  • 面向过程(Process-oriented Programming):面向过程的结构化开发语言适合早期的“作坊式”开发,但是随着软件规模的扩大,这种开发方式的弊端也逐渐显示出来,开发周期长、不利于维护等等,于是“软件危机”爆发了,在此大环境下产生了一种新的开发思想——面向对象。

  • 面向对象(Object-oriented Programming,OOP):将所有预处理的问题(业务需求),以对象为基本单元,同时了解对象具有哪些属性和行为,以解决对象面临的实际问题。

  • 面向对象和面向过程是相辅相成的。

  • 抽象:根据业务需求,注重主要信息,忽略次要信息,进行信息的抽取。

  • 封装:将属性私有化,提供公有的 get / set 方法,对私有的属性进行访问。

  • :具有相同的特征和行为的实体的集合,是一种抽象的数据类型(八种基本数据类型和String之外的)。想表示现实生活中的一个事物的时候,与Java现有的类型不匹配,而自行开发的。

  • 对象:是类的实例化,是现实中真是存在的实体。

  • 类和对象的关系

这里写图片描述

2、类之间的通信

Student.java

public class Student {
    //属性(静态特征)
    private String sname;
    private char sex;
    private int age;
    //普通的方法
    public void study() {
        System.out.println(this.sname+"爱学习");
    }
    //回答问题的方法
    public void answer() {
        System.out.println(this.sname+"回答了问题");
    }
    //对私有的属性提供公有的get/set方法
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public char getSex() {
        return sex;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

Teacher.java

public class Teacher {
    private String tname;
    //对学生进行提问的方法:通过传递参数建立学生和老师的关系
    public void question(Student s) {
        System.out.println(this.tname+"提出了问题");
        s.answer();
    }
    public String getTname() {
        return tname;
    }
    public void setTname(String tname) {
        this.tname = tname;
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.setSname("陈同学");
        Teacher t = new Teacher();
        t.setTname("赵老师");
        t.question(s);
    }
}

通过以上的代码初步了解类之间通信的概念,接下来设置一种情景:用面向对象的思想描述猎人打猎的行为。

Animal.java

public class Animal {
    private String aname;
    public void dead() {
        System.out.println(this.aname+"死了");
    }
    public String getAname() {
        return aname;
    }
    public void setAname(String aname) {
        this.aname = aname;
    }
}

Gun.java

public class Gun {
    public void shoot(Animal an) {
        System.out.println("枪口对准了"+an.getAname());
        an.dead();
    }
}

Hunter.java

public class Hunter {
    public void hunt(Gun g,Animal an) {
        System.out.println("开始射击!");
        g.shoot(an);
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Animal an = new Animal();
        an.setAname("野猪");
        Hunter h = new Hunter();
        Gun g = new Gun();
        h.hunt(g, an);
    }
}

3、访问权限

这里写图片描述

4、构造方法

  1. 作用: (1)创建对象(2)对对象进行初始化
  2. 特点: 方法名与类名相同,没有返回值
  3. 如果不写构造方法的话,系统会默认添加一个无参的构造方法;但是如果写了含有参数的构造方法(没有无参的),在创建对象的时候就必须传入参数。

Rectangle.java

public class Rectangle {
    private float length;
    private float width;
    //通过构造函数进行初始化
    public Rectangle(float length,float width) {
        this.length = length;
        this.width = width;
    }
    //计算周长
    public float getPer() {
        return 2*(length+width);
    }
    //计算面积
    public float getArea() {
        return length*width;
    }
    //显示计算的结果
    public void showAll() {
        System.out.println("周长是:" + this.getPer());
        System.out.println("面积是:" + this.getArea());
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Rectangle r = new Rectangle(3,5);
        r.showAll();
    }
}

5、构造方法的重载

构造方法的重载:方法名相同,参数列表不同
this关键字的作用:(1)区分属性和参数(2)构造方法的互调(需保留一个出口)

Emp.java

public class Emp {
    private int eno;
    private String ename;
    private float sal;
    private String job;
    public Emp(int eno,String ename,float sal,String job){
        this.eno = eno;
        this.ename = ename;
        this.sal = sal;
        this.job = job;
    }
    //使用this进行构造方法的互调
    public Emp(String ename,float sal) {
        this(1001,ename,sal,"自由职业者");
    }
    public void showAll() {
        System.out.println("编号:"+this.eno);
        System.out.println("姓名:"+this.ename);
        System.out.println("工资:"+this.sal);
        System.out.println("工作:"+this.job);
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Emp e = new Emp("张三",5000);
        e.showAll();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值