0
点赞
收藏
分享

微信扫一扫

Java中级(三): 面向对象-类与方法

小迁不秃头 2022-03-23 阅读 51

一:面向对象
1、Object_Oriented

//面向对象 oop
public class Object_Oriented01 {
    public static void main(String[] args) {
        /*
        面向对象的思想:
            万事万物皆对象
            任何对象都有自己的特征和行为
        对象:
             特征:成为属性,一般名词,代表对象有什么
             行为:称为方法,一般动词,代表对象能做什么
        例如:手机是一个对象
             手机属性:
                    品牌:
                    颜色:
                    价格:
                    重量:
                    ......
             手机的使用方法:
                    收发短信:
                    拨打电话:
                    ......
         */
        /**
         * 如何使用程序模拟现实世界,解决现实问题
         *      首先,在程序中,必须具有和现实中相同的对象,用以模拟现实世界
         *      然后,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题
         *      现实中的对象多来源模板,程序中也应该有模板,模板也被称之为类,通过模板创建出来的实体,即为程序中的对象,称之为对象
         *      现实中的对象----------->程序中对象
         *      现实中的对象<-----------程序中对象
         */
        /**
         * 类的抽取:在同一组或类似的对象中,抽取出共性的特征和行为,保留所关注的部分
         */


        /*
        类与对象的关系
            类:模板(一个) -->创建-->对象:实例(多个)
            类:定义了对象对应具有的特征行为,类是对象的模板
            对象:拥有多个特征和行为的实体,对象是类的实例
         */
        /*
        实例变量:
        对于实例变量而言,未赋值可以直接访问,默认值为null
        默认值:
             整数:0
             小数:0.0
             字符:\u0000
             布尔:false
             其他:null
         */
        /*
        局部变量与实例变量的区别
                    局部变量                          实例变量
      定义位置: 方法或方法内的结构当中             类的内部,方法的外部
        默认值:      无默认值                     字面值(与数组想同)
      使用范围: 从定义行到包含其结构结束                本类有效
      命名冲突:     不允许重名                   可与局部变量重名,局部变量优先
         */
        //将对象保存在相同类型的dog中,dog变量成为“对象名”,或者引用名
        Dog dog = new Dog();  //基于Dog创建对象
        dog.breed = "金毛"; //调用属性,并填入他的所有的特征
        dog.age = 10;       //访问属性:对象名.属性名 = 值;  //赋值
        dog.furColor = "金色";
        dog.sex = "公";
        //System.out.println(dog); //com.javastudy03.Dog@5cad8086  输出这个dog在内存中位置
        System.out.println( //访问属性
                "品种:" + dog.breed + "\t" +
                        "年龄:" + dog.age + "岁" + "\t" +
                        "性别:" + dog.sex + "\t" +
                        "毛色:" + dog.furColor
        );

        dog.eat(); //调用方法:对象名字,方法名();
        dog.sleep();
    }
}

class Dog { //类名
    String breed; //品种      属性:通过变量表示,又称为实例
    int age; //年龄           语法: 数据类型  属性名
    String sex; //性别       位置:类的内部,方法的外部
    String furColor; //毛色

    public void eat() { //方法:通过函数表示,又称为实例方法
        System.out.println(breed + "会吃东西"); //加上品种,会干啥
    }

    /*
    语法:
        public  返回值类型  方法名(形参){
            //方法的主体
       }
     */
    public void sleep() {
        System.out.println(breed + "会睡觉");
    }
}

2、实例方法:ExampleMethod

//实例方法
public class ExampleMethod_Practice02 {
    public static void main(String[] args) {
        /*
        实例方法:
            对象的实例方法包含两部分,方法的声明和方法的实现
                方法的声明:
                        代表对象能做什么
                        组成:修饰符   返回值类型   方法名(形参列表)
                方法的实现:
                        代表对象怎么做,即如何实现对应的功能
                        组成:{}
         */

        /*
        定义学生类:
             属性:姓名(name)、年龄(age)、性别(sex)、分数(score)
             方法:打招呼(sayHello) //打印学生所有信息
             创建学生对象,并为属性赋值,并打印
         */
        Student student = new Student();
        student.name = "小明";
        student.age = 18;
        student.sex = '男';
        student.score = 98;

        Teacher teacher = new Teacher();
        teacher.name ="宋鹏";
        teacher.age = 22;
        teacher.salary = 2526.8;

   /*     System.out.println(
                "姓名:" + student.name + "\t" +
                        "年龄:" + student.age + "岁" + "\t" +
                        "性别:" + student.sex + "\t" +
                        "分数" + student.score
        ); //输出可以放这里*/
        teacher.sayHi();
        student.sayHello();
    }
}

class Student { //学生类
    String name; //姓名
    int age;    //年龄
    char sex;   //性别
    double score;  //分数

    public void sayHello() {
        System.out.println(
                "大家好,我叫:" + name + "\t" +
                        "我今年:" + age + "岁" + "\t" +
                        "我是一个:" + sex + "生" + "\t" +
                        "我的考试分数是:" + score
        );//也可以放这里
    }
}

class Teacher {
    String name; //姓名
    int age;    //年龄
    double salary; //工资

    public void sayHi() {
        System.out.println(
                "大家好,我是小明的老师,我叫:" + name + "\t" +
                        "我今年:" + age + "岁" + "\t" +
                        "我的工资是:" + salary
        );
    }
}

3、方法的重载:MethodOverloading

//方法的重载
public class MethodOverloading_Practice03 {
    public static void main(String[] args) {
        /*
        方法的重载:有些情况下,对象的同一种行为可能存在多种实现过程
        重载:在一个类中我们定义多个名称相同的方法
        要求:方法名称相同
             方法的参数列表不同(类型、个数、顺序)
             与访问修饰符无关,返回值类型无关
        调用带有重载的方法时,需要根据传入的实参去找到对应匹配的方法
        好处:屏蔽使用差异,灵活,方便
        两个方法的方法名称和参数列表都相同,只有参数名称不一样,编译报错
        注意:只是参数名称不同,并不能构成方法的重载
         */

        Operation op = new Operation();
        op.show();
        op.show(5);
        /*String str = op.show("李磊");
        System.out.println(str);*/
        op.show("李磊");
        op.show(1,"信息");
    }
}

class Operation {
    public void show() {
        System.out.println("这是一个无参构造方法");
    }

    public void show(int number) {
        System.out.println("这一个int类型的参数" + number);
    }

    /*public String show(String name){
        return  name;
    }*/
    public void show(String name) {
        System.out.println("这一个String类型的参数" + name);
    }

    public void show(int number ,String massage) {
        System.out.println("这一个String类型的参数:"+ number+"\t"+ massage);
    }
}

4、构造方法:ConstructionMethod

//构造方法
public class ConstructionMethod_Practice04 {
    public static void main(String[] args) {
        /*
        构造方法:类中的特殊方法,用于创建对象
        特点:
            名称与类名完全相同
            没有返回值类型
            创建对象时,调用构造方法,不可通过句点调用
        注意:没有在类中显示定义构造方法,则编译器默认提供无参构造方法

        构造方法重载:
            构造方法也可以重载,遵循重载原则
         */

         /*
        类是模板,可服务于此类的所有对象,this是类中的默认引用,代表当前实例
        当服务于某个对象时,this则指向这个对象
        当创建s1对象时候,指向0*0000A001
        访问的name属性即是0*0000A001地址中的name空间
        当创建s2对象时候,指向0*0000B002
        访问的name属性即是0*0000B002地址中的name空间
         */

        Pupil pu = new Pupil();
        pu.name = "小明";
        pu.age = 10;
        pu.sex = '男';
        pu.score = 65.6;
        //pu.sayHello();

        Pupil pupil = new Pupil("宋鹏", 10);
        pupil.sayHello();


        Pupil pup = new Pupil("大佐", 19, '男', 98);
        pup.sayHello();

        //this可以调用属性和方法     this.name 调用name的属性
        //调用本类中的其他构造方法  如this()  this(实参) 必须在构造方法的首行
        /*
        调用带参构造方法注意:
                只能调用一次
                必须是第一条语句
          在构造方法中,调用本类的其他的构造方法,即可复用构造方法中的逻辑代码
         */

    }
}

class Pupil {
    String name;
    int age;
    char sex;
    double score;

    //默认的构造方法
    public Pupil() {
        System.out.println("默认的构造方法执行了");
    }

    public void sayHello() {
        System.out.println(
                "大家好,我叫:" + this.name + "\t" +
                        "我今年:" + this.age + "岁" + "\t" +
                        "我是一个" + this.sex + "生" + "\t" +
                        "我的考试分数是:" + this.score
        );//也可以放这里
    }

    public Pupil(String n, int a) { //构造方法为属性赋值
        name = n;
        age = a;
    }

    public Pupil(String n, int a, char s, double sc) {
        this.name = n;
        this.age = a;
        this.sex = s;
        this.score = sc;
    }


}
举报

相关推荐

0 条评论