黑马程序员_面向对象

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

  在Java的开发过程,其实就是不断的创建对象,使用对象,指挥对象做事情。设计的过程,其实就是在管理和维护对象之间的关系。

面向对象的三个特征:1、封装;2、继承;3、多态.

一、创建一个类(对象)

使用面向对象编程思想在java程序中,表示出一辆汽车
  对象->汽车.

java程序需要一辆汽车:
  用面向对象思想考虑汽车,一辆汽车就是一个对象...
  如何用java 代码表示一个对象...
  程序设计者: 先设计这个汽车...
  设计汽车:
   自然语言设计.
   汽车:
    属性
     颜色
     名字
     价格
     型号
    行为
     跑...
   java 代码设计出一辆汽车,并创建出这辆汽车对象.
   在java 代码中如何设计一个汽车,是通过类(class 进行)
   java 语言设计汽车...
   class Car{
    变量->属性
    方法->行为(功能)
   }

 1 public class Demo{
 2     public static void main(String[] args){
 3         //2. 根据设计好的Car 类,创建汽车对象了.
 4         Car c=new Car();
 5         // 给对象的属性赋值.
 6         c.name="宝马";
 7         c.color="白色";
 8         c.type="x6";
 9         c.price=1000000;
10         //使用对象. 可以让这辆车运行...
11         c.run();
12         // 获取对象的属性值.
13         System.out.println("价格:"+c.price);
14     }
15 }
16 /**
17     1.设计汽车类.
18         有汽车类,可以根据汽车类创建出对应的汽车对象...
19 */
20 class Car{
21     //属性-> 成员变量(直接位于类中,是类的成员一部分)
22     String name;
23     String color;
24     String type;
25     double price;
26     //行为 ->成员方法(直接位于类中,是类的成员的一部分)
27     public void run(){
28         System.out.println(color+"的"+name+" "+type+"价值:"+price+"在跑.");
29     }
30 }

二、封装
1. 实现方式:
    成员变量私有
     使用private 修饰成员变量.
     访问修饰符,保证成员变量被private 修饰后,只能在本类中访问,离开本类就无法访问了...
    提供公共的get和set 方法.
     get 方法获取对象的属性值
     set 方法使用给对象的属性赋值.  
     在set 方法可以加入逻辑判断,过滤掉非法数据.
     根据实际开发,可以控制set 和set ,如果不能对外提供的方法,就不可以不提供get 或者set ...
  类的封装的好处:
   隐藏了类的具体实现
   提高对象数据(对象属性)的安全性
   提高了程序的可维护性和安全性

 1 public class Demo1{
 2     public static void main(String[] args){
 3         Person p=new Person();
 4         p.name="tom";
 5         p.age=22;
 6     }
 7 }
 8 class Person{
 9     private String name;
10     private int age;
11
12     public void setName(String n){
13         name=n;
14     }
15     public void setAge(int a){
16         if(a>0&&a<=130){
17             age=a;
18         }else{ // 过滤非法数据...
19             System.out.println("年龄非法!!!");
20         }
21     }
22     public String getName(){
23         return name;
24     }
25     public int getAge(){
26         return age;
27     }
28
29     public void speak(){
30         System.out.println("姓名:"+name+" 年龄:"+age+"我会说话.");
31     }
32 }

三、继承

继承是子类复制了父类除被private修饰之外的成员属性和成员方法.同时在这个基础上对属性和方法进行增删查改.

  1 class Person
  2 {    //成员变量
  3     private String name;
  4     private int age;
  5     private char sex;
  6     //构造方法
  7     Person(){
  8     }
  9     Person(String name,int age,char sex){
 10         this.name = name;
 11         this.age = age;
 12         this.sex = sex;
 13     }
 14     //一些get和set方法
 15     void setName(String name){
 16         this.name = name;
 17     }
 18     String getName(){
 19         return this.name;
 20     }
 21     void setAge(int age){
 22         this.age = age;
 23     }
 24     int getAge(){
 25         return this.age;
 26     }
 27     void setSex(char sex){
 28         this.sex = sex;
 29     }
 30     char getSex(){
 31         return this.sex;
 32     }
 33     //普通成员方法
 34     void eat(){
 35         System.out.println("我吃饭");
 36     }
 37     void sleep(){
 38         System.out.println("我睡觉");
 39     }
 40 }
 41 class Student extends Person
 42 {
 43     //自有的成员变量
 44     private String stuNo;
 45     //构造方法
 46     Student(){
 47     }
 48     Student(String name,int age,char sex,String stuNo){
 49
 50         super(name,age,sex);//调用父类带参的构造方法
 51         this.stuNo = stuNo;
 52     }
 53     //自有的get和set方法
 54     void setStuNo(String stuNo){
 55         this.stuNo = stuNo;
 56     }
 57     String getStuNo(){
 58         return this.stuNo;
 59     }
 60
 61     //自有的普通成员方法;
 62     void study(){
 63         System.out.println("我学习Java");
 64     }
 65 }
 66 class Teacher extends Person
 67 {
 68     //成员变量
 69     private String teaNo;
 70
 71     //构造方法
 72     Teacher(){
 73     }
 74     Teacher(String name,int age,char sex,String teaNo){
 75         super(name,age,sex);
 76         this.teaNo = teaNo;    //给自有的成员赋值
 77     }
 78     //一些get和set方法
 79     void setTeaNo(String teaNo){
 80         this.teaNo = teaNo;
 81     }
 82     String getTeaNo(){
 83         return this.teaNo;
 84     }
 85     //普通成员方法
 86     void teach(){
 87         System.out.println("我们教Java");
 88     }
 89 }
 90 class Demo
 91 {
 92     public static void main(String[] args)
 93     {
 94         Teacher t1 = new Teacher();
 95         t1.setName("小明");        //继承的
 96         t1.setAge(20);                //继承的
 97         t1.setSex(‘男‘);            //继承的
 98         t1.setTeaNo("it_tea_001");    //自己的
 99
100         t1.eat();    //继承的
101         t1.sleep();    //继承的
102         t1.teach();    //自己的
103
104
105     }
106 }

四、多态

多态:   1.使用"父类"的变量,存储"子类对象的引用",这种形式叫:多态    Person p = new Student();

多态前提和体现   1.有继承关系:(必须的)   2.有方法重写;    3.有父类引用指向子类对象;(必须的)

 1 class Person
 2 {
 3     String name;
 4     int age;
 5 }
 6 class Student extends Person
 7 {
 8 }
 9 class Teacher extends Person
10 {
11 }
12 class Employee
13 {
14 }
15 class Demo
16 {
17     public static void main(String[] args)
18     {
19         //继承后,我们一般情况下,都直接使用子类
20         Student stu = new Student();
21         stu.name = "张三";
22         stu.age = 20;
23         System.out.println(stu.name + "," + stu.age);
24
25         //使用多态:父类的变量存储了子类的引用
26         Person p = new Student();//多态;
27         p.name = "李四";
28         p.age = 22;
29         System.out.println(p.name + "," + p.age);
30
31         Person p2 = new Teacher();
32         p2.name = "王五";
33         p2.age = 20;
34         System.out.println(p2.name + "," + p2.age);
35
36     //    Person p3 = new Employee();//错误的,Employee没有继承自Person
37     }
38 }

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

时间: 2024-10-25 20:06:43

黑马程序员_面向对象的相关文章

黑马程序员_面向对象解决的一个小问题,觉得还好,就存一下

/** *10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河. *当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题. *编程解决猫狗鱼过河问题. * *分析: * 问题中的对象:猫.狗.鱼.老农.岸1(这岸).岸2(对岸) * * * 限制条件是:老农每次只能带一只动物过河 * 老农不在时,狗咬猫 * 老农不在时,猫吃鱼 * 目标是:将猫.狗.鱼从这岸运到对岸. * 当农夫到达一个岸后,即为一个中间状态,则这个中间状态需要满足,岸

黑马程序员_面向对象基础之封装与继承

-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 封装 1.1 基本概念  封装(encapsulation)是面向对象三大特征之一,它是指将对象的状态信心隐藏在对象的内部,不允许外部直接进行访问,而是通过该类提供的方法来实现对内部信息的操作和访问.封装的作用如下: ※ 隐藏类的实现细节. ※ 让使用者只能通过实现预定的方法来访问数据,从而可以在方法里添加逻辑控制,限制对类成员的不合理访问 ※ 可以进行检查,从而有利于保证对象信息的完整性. ※ 便于修改,提高

黑马程序员_面向对象基础

1.类和对象 面向对象技术,也简称OOP.前面说了,它是一个编程思想,既然是思想,它就适用于任何支持面向对象编程的语言.虽然不同的面向对象语言都有其各自的特点,但是万变还是不离其宗的. 1.什么是类? 首先了解几个概念,什么是类?这个其实很容易理解,在现实中我们常说,物以类聚.人以群分.这里的类,和我要解释的类,概念上是一样的,都是现实中一些拥有共同属性.特征的事物.就像,人类,犬类,猫类等,它们通常都是抽象的描述了,一类事物,不是具体指的指某一个,人啊,狗啊,猫啊,这样的,而是它们的统称. 定

黑马程序员_面向对象与类的分析

一.面向对象的概述: java是一种面向对象的编程语言,也就是说对象是这种语言的基础,没有对象了,就没有了java.任何功能都是通过对象来实现的,就是将功能封装进对 象,让对象去调用这些功能.这种思想是将数据作为第一位,而方法(功能或者说是算法)作为其次.我个人认为,这是对数据的一种优化,安全性更高,操作起数据来一更方便. 那么将这种思想提升到一种境界就是:万物皆对象. 1.对面向对象的理解: 1)面向对象是相对面向过程而言的,且基于面向过程的. 2)面向对象是一种思想. 3)面向对象将功能封装

黑马程序员_面向对象深入2

1.抽象类 抽象类是一个类的抽象化描述,和普通类的定义成员的方法一样,只是如果要定义抽象成员的话,则需要使用到abstract关键字.通常在程序的设计中,把主体的类功能放在抽象类中,让其它类去继承.抽象类不能被实例化,除了使用多态性.所以它的天性就是被别人所继承: 定义示例: abstract class Animal{ private string name; private string color; private int age; //属性 public string Name{ set

黑马程序员_面向对象之抽象类与接口

抽象类(abstract)???? 当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的放过,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了. 抽象类概念 当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而

黑马程序员_交通灯管理系统

(1)项目的需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 例如: 由南向而来去往北向的车辆 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 平时开车过十字路口红绿灯的时候,也知道红绿灯运行的顺序 (1)任何方向的车,向右边转弯的时候,是不需要看红绿灯 (2)在十字路口,相对方向的红绿灯的工作方式是一样的,南相对与北,东相对与西,这把它分成两对 (3)红绿灯顺序,一对直行通道绿灯直行车辆,等直行变红,还是这对的车辆可以左转,等左转变红,就轮到下一对了.所以在设计程序的时候,只

黑马程序员_银行业务调度系统

1,项目的具体需求 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户 = 1 :6 :3.   客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速

【黑马程序员】————面向对象语法2

一.      set方法和get方法 1.          set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 成员变量尽量不要用@public 2.          set方法 1)       作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2)       命名规范: 1> 方法名必须以set开头 2> set后面