Day10 面向对象 、类和对象的关系

什么是面向对象

面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
面向对象本质就是基于面向过程的! 

什么是面向过程? 代表语言就C语言
    
    面向过程的思想:(亲力亲为的)
            
        1)拿到一个需求,分析步骤
        2)代码实现, 中间完成代码中的逻辑判断....
        3)写完之后在测试!
        
        比如:
                键盘录入三个数据,比较三个数据中最大值(方法完成)
                
        1)需要借助于jdk提供的Scanner来进行键盘录入
        (整个过程录入细节-->面向对象)
        
        2)定义比较三个数据中最大值的方法
            2.1) 两个明确
                    明确返回值类型 :int
                    明确参数类型: 三个参数,都是int
            2.2)完成方法的业务逻辑
                    要么是分步骤三元运算符实现
                    要么直接if...else...嵌套实现
        3)main方法中调用getMax(实际参数列表); 返回结果输出;
面向对象的思想特点(不是面向对象特征)
        1)更符号我们生活中的思想行为习惯
        2)让复杂的事情简单化 
        3)我们从执行者变成了指挥者!

 面向对象的三大特征:封装,继承,多态!

 面向对象设计原则?
就是不断的创建对象,使用对象,指挥对象做事情!
比如:
        Scanenr类:键盘录入 
        
可以不断的创建键盘录入对象,不断的去使用这个scanner对象
        
    帮助我们完成录入的其他类型数据!

类和对象的关系

相辅相成
类和事物:一一对应的
类:---描述一组事物(泛指)的实行和行为的
        xxx事物
                属性有哪些
                行为有哪些

对象:是描述具体的事物
        通过代码体现 类名 对象名  = new 类名() ;
                对象名访问成员变量
                对象名调用成员方法

Java中最基本的单元----"类"

什么是类呢?
类---就是描述现实世界事物的属性和行为的统称!
        
类,是描述一组事物的属性和行为的集合! (官方的概念)

现实世界事物---->学生,老师,运动员,教练,军人,工人....猫,狗....等等
  举例:
          学生事物
                  属性:姓名,年龄,性别,身高,爱好... ----对应 类中的成员变量
                  行为:学生的行为---吃,睡,玩,学习等等 ----对应的类中的成员方法
                          public void study(){}
                      成员方法:今天写成员方法的时候,去掉static(之前怎么写还怎么写)
              public 返回类型 方法名(参数类型1 变量名1,参数类型2 变量名2....){
                                      有返回值类型需要return
                                      没有返回值类型,返回值类型void ,此处直接输出结果;
          }
      
      需要使用代码体现出来现实世界的事物

 			//class 类名(见名知意){  }
  			//定义学生类
  			class Student{
  					//成员变量----就是描述现实世界事物的属性(类中,方法外定义的变量)
  					String name; //姓名
  					int age ;//年龄
  					String gender ; //性别
  					//..
  					//成员方法---行为
  					public void study(){//学习
  						System.out.println("我们正在学习JavaSE之面向对象...") ;
  					}
  					//睡觉
  					public String sleep(){
  						return "学生正在睡觉" ;
  					}
  					
  					//吃饭...
  					public void eat(){
  						System.out.println("学生正在吃饭...") ;
  					}
  			}

上面的描述"学生事物"----属性和行为
    
        分别使用代码体现出---学生事物("泛指") ---定义了一个Student类
        
        我们并没有给出具体的学生是谁?----->具体的事物才能体现出来他具体的姓名,年龄,性别
        
            具体的学生信息
            张三
            20
            男
            
            具体的学生事物----使用代码体现出来---就是 创建对象
                        类名 对象名  = new 类名() ; 固定格式
            
                        对象名.成员变量(属性) = 赋值; 注意数据类型
                        对象名.成员方法(行为) ; //有返回值,返回结果;没有返回值,直接单独调用
        
                Student student = new Student() ;
                                                                        null                                            0
                System.out.println("学生 姓名是:"+student.name+",年龄是"+student.age+",
                性别是:"+student.gender) ; null
                
                
                student.name =  "高圆圆" ; //
                student.age = 42 ;
                student.gender = "女" ;
                
                System.out.println("学生 姓名是:"+student.name+",年龄是"+student.age+",
                性别是:"+student.gender) ;
                student.study() ;
                String result = student. sleep() ;
                System.out.println(result) ;
                student.eat();

 /*
    需求:
            描述学生事物,
                学生事物的属性:姓名,年龄,性别
                学生事物的行为:主要学习,吃饭,睡觉...
                
                
分析:
        1)定义一个学生类--描述学生事物
                成员变量:  类中方法外
                        属性:姓名,年龄,性别
                成员方法:去掉了static
                    study(),sleep(),eat()
        2)然后在测试类StudentDemo中进行测试
                        
*/

//学生类
class Student{
	
	//成员变量(类中方法外)--事物的属性(都是小写,满足小驼峰命名法即可)(一一对应的)
	//姓名,年龄,性别
	String name; //姓名
	
	int age ; //年龄
	
	String gender ;//性别
	
	//成员方法:去掉了static
	public void study(String content){//参数为:学生学习的"课程名称"
		System.out.println("学生正在学习"+content) ;
	}
	
	//吃饭
	public void eat(String str){
		System.out.println("学生正在"+str) ;
	}
	
}


//测试类
class StudentDemo{
	public static void main(String[] args){
		
		//测试学生类---描述具体的事物
		
		//创建学生对象--描述具体的事物
		//格式:类名 对象名 = new 类名() ;
		Student student = new Student() ; 
		//对象名student:访问成员变量
		System.out.println(student.name+"----"+
		student.age+"---"+student.gender) ; //null----0---null
		
		System.out.println("----------------------------") ;
		
		//给成员变量赋值
		student.name = "高圆圆" ;
		student.age = 42 ;
		student.gender = "女" ;
		System.out.println(student.name+"----"+
		student.age+"---"+student.gender) ;
		student.study("JavaSE");
		student.eat("吃鸡") ;
		
	}
}


/*
        需要使用面向对象的编程方式:来描述手机事物
        
        手机事物
                属性:品牌 ,价格 ,机身颜色,机身内存..
                行为:打电话,发短信,玩游戏,学习...
        
分析:
        定义一个手机类----来描述现实世界事物的"手机事物"
        
                成员变量---属性: 
                        品牌:  brand;
                          价格  price ;
                        颜色 color ;
                        内存 memory ;
                行为:
                    callPhone(String name),name:某个人的名称
                    sendMsg(String name), 给name 打发短信
                    playGame():玩游戏
                    study():学习
                
*/

//定义一个手机类
class Phone{
	//成员变量---类中方法外定义的变量
	String brand ; //品牌
	
	int price ; //价格 
	
	String color ; //颜色
	
	String memory ; //机身内存
	
	
	//成员方法:去掉static
	///callPhone(String name),name:某个人的名称
	
	public void callPhone(String name){
		System.out.println("使用手机正在给"+name+"打电话") ;
	} 
	
	//sendMsg(String name), 给name 打发短信
	public void sendMsg(String name){
		System.out.println("使用手机给"+name+"发短信") ;
	}
	
	//	playGame():玩游戏
	public void playGame(String gameName){
		System.out.println("使用手机玩"+gameName);
	}
	
	
}


//手机类的测试类
class PhoneTest{
	public static void main(String[] args){
		
		//手机类定义完毕,需要创建具体的事物来描述具体的手机
		//创建一个手机类对象
		Phone phone  = new Phone() ;//Phone@6d06d69c 地址值
		System.out.println(phone) ;
		System.out.println(phone.brand+"---"
		+phone.price+"---"+phone.color+"---"+phone.memory) ;
		
		//赋值
		phone.brand = "华为mate30pro" ;
		phone.price = 6799 ;
		phone.color = "翡翠绿" ;
		phone.memory = "128G" ;
		System.out.println(phone.brand+"---"
		+phone.price+"---"+phone.color+"---"+phone.memory) ;
		
		//打电话
		phone.callPhone("高圆圆") ;
		//发短信:
		//public void sendMsg(String name)
		phone.sendMsg("张佳宁") ;
		//public void playGame(String gameName)
		phone.playGame("csgo") ;
	}
}

private关键字 

/**
 * private关键字的特点:
 *
 *  private访问的权限:范围是最小的:仅限当前类中!
 *      被private修饰的成员变量/成员方法,只能在当前类中访问
 * 外界类不能直接访问!
 *      但是,可以间接的通过公共访问 来访问!
 */

//定义一个类
class Demo{

    //公共的成员变量
    public int num ;
    private int num2 = 200;//private修饰的

    //私有的成员方法,也只能在本来访问
    private void method(){
        System.out.println("method Demo...");
    }

    //公共成员方法
    public void function(){
        method(); //公共访问间接访问私有本来私有方法
        System.out.println("=====================");
        System.out.println("function Demo");
    }
    //公共成员方法
    public void show(){
        System.out.println(num);
        System.out.println(num2);//num2私有的
    }
}

//测试类
public class PrivateDemo {

    public static void main(String[] args) {

        //访问Demo类中的num变量?
        Demo d  = new Demo() ;
        d.num = 20 ;
        System.out.println(d.num);
        //System.out.println(d.num2);//此处访问不到

        System.out.println("--------------------------");
        d.show(); //公共访问

      //  d.method() ;//method方法是私有的,无法访问的!
        d.function();
    }
}

/**
 * 需要描述一个学生事物,学生事物--有姓名,和年龄两个属性
 *      写一个测试类,测试学生的信息
 *
 *
 *      通过上面的测试,发现问题,我给学生的年龄赋值一个负数,不合适!
 *
 *   需要改进这个程序:
 *          可以定义成员方法:为了校验这个年龄的合法范围
 *          如果它在<0 或者>150 ,提示"非法数据"
 *          否则的话,就可以将变量赋值给成员变量age
 *
 *          这个方法定义在Student类中还是定义在测试类中?
 *          Student类中
 *
 *
 *          虽然定义了,但是在测试中的时候可以不用!依然会输出非法数据 年龄负数!
 *
 *          所以Java中有技术----->封装!
 *
 *          封装:就是将一个事物中的属性私有化,(对外私有),----
 *                                      说白了,代码中体现 将一个类中的所有的成员变量加入关键字private
 *      保证了数据安全性,对外提供的公共的访问方法来访问,并不能直接访问!
 *
 *          公共方法:
 *                  setXXX()getXXX()方法----称为"setter and Getter"
 *
 *
 */

//定义一个学生类
class Student{

    //成员变量(属性)
    String name ; //姓名  默认null
    private int age ; //年龄    默认0

    //定义一个校验年龄的成员方法
    public void setAge(int a){
        if(a<0 || a> 150){
            System.out.println("对不起,数据非法!");
        }else{
            age = a ;
        }
    }


    //单独定义一个成员方法,输出学生的信息
    public void showStudent(){
        System.out.println("学生的姓名是:"+name+",年龄是:"+age);
    }

}

//测试类
public class StudentTest {

    public static void main(String[] args) {

        //测试学生
        //正常数据
        //类名 对象名 = new 类名() ;
        Student student = new Student() ;
        student.name = "高圆圆" ;
       // student.age = 42 ; //age已经私有化了,不能访问了!
        //访问成员方
        student.showStudent();

        System.out.println("---------------------") ;

        //在创建一个新的学生
        Student student2 = new Student() ;
        student2.name = "赵又廷" ;
        //student.age = -45 ;//改进 这种数据被更改了负数,不安全!
        student2.setAge(-45); //现在调用刚才的方法
        student2 .showStudent();
        System.out.println("---------------------------") ;
        //创建一个学生,不用你的方法,依然输出的有非法数据!
        Student student3 = new Student() ;
        student3.name = "张三丰" ;
       // student3.age = -100 ;//以后这些数据都是来源于数据库的有效数据!
        student3.showStudent();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值