Day5 面对象编程(P39~P45)

面向对象编程

面向对象Object Oriented Programming(OOP)与面向过程procedure oriented programming(POP):
➢ 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。
➢ 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽 象、分类、继承、聚合、多态等。

面向对象的三大特征 :封装 (Encapsulation) 、继承 (Inheritance) 、多态 (Polymorphism)。

Java代码是由诸多不同功能的类(class)组成,类包含:

  • 属 性:对应类中的成员变量
  • 行 为:对应类中的成员方法

Field = 属性 = 成员变量,Method = (成员)方法
面向对象程序设计的重点是类的设计
定义类其实是定义类中的成员(成员变量和成员方法)

类的语法格式

修饰符 class 类名 {
   属性声明; 方法声明;
}
修饰符public:类可以被任意访问
类的正文要用{ }括起来
举例:

public class Person{ 
    public int age ;        //声明公有变量 age 
    public void showAge() {      //声明方法showAge( ) 
        System.out.println(age); 
    } 
}

创建Java自定义类
步骤: 1. 定义类(考虑修饰符、类名)

  1. 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
  2. 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)

练习: 定义Person、Animal等类,加以体会。

对象的创建和使用

Java类和类的成员,通过Java类的实例化来使用,即创建类的对象

  • 使用new + 构造器创建一个新的对象;
  • 使用“对象名.对象成员"的方式访问对象成员(包括属性和方法);

//在方法体外,类体内声明的变量成为成员变量;在方法体内部声明的变量成为局部变量。


D5.png

区分
成员变量:

  1. 定义在类中,在整个类里可以被访问;
  2. 可以分为类成员变量和实例成员变量,实例变量存在于对象所在的堆内存里;
  3. 有默认初始化值;
  4. 可以根据需要选择一个权限修饰符;

局部变量:

  1. 定义在局部范围内,方法内,代码块内等;
  2. 存在于栈内存里; 作用的范围结束,变量空间会自动释放;
    3.没有默认初始化,每次必须显示初始化;
  3. 声明时不指定权限修饰符;

方法

修饰符 返回值类型 方法名(参数列表){
  ... ...
}
//return语句传递返回值,void没有返回值

练 习 1

编写教师类和学生类,并通过测试类创建对象进行测试
学生类 属性: 姓名 年龄 参加的课程 兴趣 方法: 显示学生的个人信息
教师类 属性: 姓名 专业 教授的课程 教龄 方法: 显示教师的个人信息

已完成,代码放在最后

方法:是类或者对象行为特征的抽象。Java里方法不能独立存在,所有的方法必须定义在类里。方法只有被调用才会执行。

定义方法时,方法的结果应该返回给调用者,交由调用者处理;
方法中只能调用方法,不可以在方法内部定义方法。
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型,引用类型的默认初始值是null。

匿名对象

如果一个对象只需要调用一次,就可以不定义对象的句柄,直接调用这个对象的方法。
匿名对象可以作为实参传递给一个方法调用。

实参:调用方法时实际传递给函数形式参数的数据
形式参数:在方法被调用时,用于接收外部传入的数据的变量

练 习 2

1.创建一个Person类,其定义如下:
要求:(1)创建Person类的对象,设置该对象的 name、age和sex属性,调用study方法,输出字 符串“studying”,调用showAge()方法显示age值, 调用addAge()方法给对象的age属性值增加2岁。 (2)创建第二个对象,执行上述操作,体会同一 个类的不同对象之间的关系。
2.利用面向对象的编程方法,设计类Circle计算圆的面积。

tips:
类的访问机制:
❖在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外: static方法访问非static的成员变量,编译不通过。)
❖在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的 成员。

方法的重载(overload)

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同就可以。

与返回值类型无关,只看参数列表,参数列表必须不同。也就是说,参数个数或者参数类型不同。调用时,根据方法参数列表的不同来区别。

练习

与void show(int a,char b,double c){}构成重载的有:
a) void show(int x,char y,double z){}   //no
b) int show(int a,double c,char b){}  //yes顺序不同也是重载
c) void show(int a,double c,char b){}   //yes顺序不同也是重载
d) boolean show(int c,char b){}   //yes
e) void show(double c){}   //yes
f) double show(int x,char y,double z){}   //no
g) void show<u>s</u>(){double c}   //no

2.编写程序,定义三个重载方法并调用。方法名为mOL。
➢三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
➢在主类的main ()方法中分别用参数区别调用三个方法.

3.定义三个重载方法max(),第一个方法求两个int值中的最大值, 第二个方法求两个double值中的最大值,第三个方法求三个 double值中的最大值,并分别调用三个方法。

public class Student {

    //姓名
    //年龄
    //参加的课程
    //兴趣
    //方法:
    //显示学生的个人信息
   public String name;
   public int age;
   public String course;
   public String interest;
   
   public void showInfo(){
   System.out.println("姓名: "+ name);
   System.out.println("年龄: "+ age);
   System.out.println("参加的课程:"+ course);
   System.out.println("兴趣:" + interest);   
   }
}
public class Teachers {
     public String name;
     public int age;
     public String course;
     public String interest;

     public void showInfo() {
     System.out.println("姓名: " + name);
     System.out.println("年龄: " + age);
     System.out.println("课程:" + course);
     System.out.println("兴趣:" + interest);
      }   
}
public class Circle {
    public double area(double r){
        return r*r*3.14;
    }    
}
public class Test {
    public static void main(String[] args){
        //编写教师类和学生类,并通过测试类创建对象进行测试
     Student student1 = new Student();
     student1.name = "simon";
     student1.age = 18;
     student1.course = "java";
     student1.interest = "java";
     student1.showInfo();
     System.out.println();
     
     Teachers t =new Teachers();
     t.name = "tom";
     t.age = 36;
     t.course = "php";
     t.showInfo();
     System.out.println();
     
     Person p1 = new Person();
     p1.name = "chole";
     p1.age = 37;

     p1.study();
     p1.showAge();
     p1.addAge();
     
    //)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
       Person p2 = new Person();
       p2.name = "lily";
       p2.age = 22;

       p2.study();
       p2.showAge();
       p2.addAge();
       System.out.println();

       //设计类Circle计算圆的面积
       Circle c1 = new Circle();
     //  double r = c1.area(2);
       System.out.println(c1.area(3));
       
       Test mol = new Test();
       mol.mOL(3);
       mol.mOL(2, 4);
       mol.mOL("hello,reload~");
       mol.max(2,3);
       mol.max(0.2,0.017);
       mol.max(0.5,0.77,0.1);
       
       
    }
    
//2.编写程序,定义三个重载方法并调用。方法名为mOL。 
//三个方法分别接收一个int参数、两个int参数、一个字符串 参数。分别执行平方运算并输出结果,相乘并输出结果,输 出字符串信息。 
//在主类的main ()方法中分别用参数区别调用三个方法。    
    public void mOL(int i){
        System.out.println(i*i);
    }
    public void mOL(int i,int j){
        System.out.println(i*j);
    }
    public void mOL(String i){
        System.out.println(i);
    }
    
//3.定义三个重载方法max(),第一个方法求两个int值中的最大值, 第二个方法求两个double值中的最大值,
//第三个方法求三个 double值中的最大值,并分别调用三个方法。
    public void max(int x,int y){
        if(x > y){
            System.out.println("the max :"+x);
        }else{
            System.out.println("the max :"+y);
        }
    }
    public void max(double x, double y) {
        if (x > y) {
            System.out.println("the max :" + x);
        } else {
            System.out.println("the max :" + y);
        }
    }
    public void max(double x, double y,double z){
        if(x > y){
            if(x > z){
                System.out.println("the max :" + x);
            }else{
                System.out.println("the max :" + z);
            }          
        }else{
            if(y > z){
                System.out.println("the max :" + y);
            }else{
                System.out.println("the max :" + z);
            }
        }
    }   
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351