面向对象

面向对象

1.面向对象的思想

​ 面向对象是基于面向过程的!

​ 面向过程:

​ 从需求到分析,从业务逻辑到结果输出,整个过程都是自己完成(什么活都是自己亲力亲为,执 行者)

​ 需求: 键盘录入三个数据,使用功能改进,求三个数据中最大值!

​ 1)分析:导包

​ 2)创建键盘录入对象Scanner

​ 3)提示并录入数据

​ 4)定义一个功能(方法)

​ 4.1)分析:明确返回值类型/明确参数类型以及参数个数

​ 4.2)方法中业务逻辑:if…else… /三元运算符操作

​ 5)调用方法

​ 6)输出结果

面向对象的思想特点:

​ 1)让复杂的事情简单化,

​ 2)更符合生活中的思想行为习惯,

​ 3)让我们从执行者变为指挥者(角色发生变化)

面向对象的设计原则:

​ 在不断的创建对象,使用对象,指挥对象做事情,

面向对象的三大特征:

​ 1)封装

​ 2)继承

​ 3)多态

1.类与事物的关系;
事物:是能够描述现实世界真实存在的泛指的东西,

​ EX; 学生------->学生事物

​ java中,最基本的单位是类:class

​ 类:是能够描述一组事物的行为和属性的集合!

​ 学生事物

​ 属性:姓名,身高,年龄,性别

​ 行为: 学习,吃饭,睡觉,

使用Java代码的方式描述上面的学生事物:
定义一个类:学生类 class Student{}
成员变量(在类中,方法外定义):name,age,stuId,gender,hight…
成员方法:(去掉static关键字): 之前的方法怎么定义,现在还怎么定义,只是去掉static即可!
study(),eat(),sleep(),playGame()…

2.类和对象:

​ 类:一组事物的属性和行为的集合!对应的真实存在的事物(泛指)

​ 对象:描述的应该是真实事物中的具体的,比如:王冰冰,

​ 代码实现:

​ 创建对象

​ 类名 对象名 = new 类名();

​ 对象名.成员变量=赋值;

​ 对象名.方法名();----------使用此方法

class Student{
    //创建成员变量
    String name;
    int age;
    String sex;
    int hight;
    //创建成员方法  去掉static
    public void study(String learnName){
     System.out.println("在学习"+learnName);
    }
    public void playGame(String gameName){
     System.out.println("在玩"+gameName);
    }   
}
class StudentTest{
    public static void main(String[] args){
        //创建一个对象、
        //类名 对象名=new 类名
        Student s=new Student();
        //给成员变量赋值
        s.name="小明";
        s.age=18;
        s.sex="女";
        s.hight=165;
        //调用方法
        s.study("javaEE");
        s.playGame("LOL");
        System.out.println(s.name+s.age+s.sex+s.hight);
    } 
}

3.局部变量和成员变量的区别

​ 1)代码书写位置不同

​ 局部变量:在方法定义中或者是方法声明上的变量

​ 成员变量:在类中方法外定义

​ 2)内存中位置不同

​ 局部变量:在栈内存中

​ 成员变量:在堆内存中

​ 3)生命周期不同

​ 局部变量: 随着方法的调用而存在,随着方法调用的结束而结束(使用完毕,立即消失)

​ 成员变量:随着类的加载而存在,随着类的加载完毕,等待垃圾回收器自动回收而消失!

​ (对象创建完毕,对象可能被继续使用,因此不会立即消失)

​ 4)初始化不同

​ 局部变量:必须赋值才可以使用,定义时必须在使用前初始化,要么直接初始化,不能没有初始化值!

​ 成员变量:随着类的加载而存在,存在系统默认初始化,可以不直接赋值!

4.成员变量的定义时机

​ 如果当前这个变量可以描述真实事物的属性,这个时候将变量定义为成员变量。

​ 而如果这个变量不能够体现出真实事物的属性,那么定义为局部变量。

5.引用类型作为参数传递_类

/*
	
	基本类型作为形式参数传递,形式参数的改变不会影响实际参数!
	引用类型在作为参数传递,形式参数的改变会直接影响实际参数!(除了String字符串之外)
				数组,类,接口
				
				类:
					具体类:实际参数传递需要的是该类的对象!(空间地址值)

*/
//定义一个学生类
class Student{
	//定义一个成员方法
	public void study(){
		System.out.println("Good Good Study ,Day Day Up!!!") ;
	}
}

//定义一个类StudentDemo类
class StudentDemo{
	//有一个成员方法:method
	public void method(Student s){//形式参数是Student类型
		s.study() ;	// 形式参数变量s.study():s应该在传递----学生类的对象!
	}
} 
//测试类
class StudentTest{
	public static void main(String[] args){
		//需求:要访问StudentDemo类中method 方法如何访问?
		//创建StudentDemo类的对象
		StudentDemo sd = new StudentDemo() ;
		//method方法中的参数传递:实际参数需要的是Student的具体对象
		Student student = new Student();
		sd.method(student) ; //实际参数是什么?
	}
}
6.匿名对象
/*
	匿名对象:
			没有名字的对象!
			
		格式:
				new 类名() ;
				
		特点:
			1)开发中使用一次即可 
			2)使用完毕,立即被回收,可以结束内存空间!
			这种写法针对:移动端: Android(考虑内存问题)
			3)作为参数传递
			
			pc端:推荐:
					类名 对象名 = new 类名() ;
*/
class Student{
	//成员方法
	public void study(){
		System.out.println("爱生活,爱Java...") ;
	}
}

class StudentDemo{
	public void method(Student s){
		s.study() ;
	}
}

//测试类中
class NoNameDemo{
	public static void main(String[] args){
		//需求:访问StudentDemo类中method
		//分步骤:
		
		//创建StudentDemo类的对象
		StudentDemo sd = new StudentDemo() ;
		//创建一个具体的学生类对象
		Student student = new Student() ;
		sd.method(student) ;
		
		System.out.println("-----------------------") ;
		
		//链式编程
		//匿名对象(只限于自己玩,开发中正常使用有名字的对象)
		 new StudentDemo().method(new Student()) ;
		 
		
	}
}

2.封装

1.封装的定义;

​ 将一个事物的属性,私有化(对外隐藏),外界不能直接访问(保证了数据的安全性),需要提供对外的公共访问来访问成员变量!

​ private: 私有的,外界无法访问,只能在本类中访问;

/*
	将学生类进行改造
		将name,age属性私有化
		只能在本类访问,外界要访问,需要通过公共方法访问
		  赋值/获取值  setxxx()getxxx() (成员方法)
*/

//定义一个学生类
class Student{
	//成员变量:name,age 私有化
	private String name ;
	private int age ;

	//提供对外的公共访问方法: 去掉static
	//给学生姓名赋值
	public void setName(String n){ //"高圆圆"
		name = n ;
	}
	//给学生年龄赋值
	public void setAge(int a){ // 30
	
		age = a ;
	}
	
	//获取学生的姓名
	public String getName(){
		return name ;
	}
	
	//获取学生的年龄
	public int getAge(){
		return age ;
	}
	
	
	
	//成员方法:学习
	public void study(){
		System.out.println("学习JavaSE_面向对象部分") ;
	}
}


//测试类
class StudentTest{
	public static void main(String[] args){
		//创建一个学生类对象
		Student s = new Student() ;
		System.out.println(s.getName()+"---"+s.getAge()) ;
		
		//s.name = "高圆圆" ;
		//s.age = 30 ;
		//公共访问:setXXX()赋值
		s.setName("高圆圆") ;
		s.setAge(30) ;
		//公共访问方法:setXXX()获取值
		System.out.println(s.getName()+"---"+s.getAge()) ;
	}
}
2.this关键字;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值