面向对象OOP(上)

面向对象OOP(上)

1面向过程&面向对象

概念:面向对象程序设计(OOP)是一种程序设计的泛型,同时也是一种程序开发的方法,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性

面向过程POP): procedure oriented programming 。

面向对象OOP) :object oriented programming 。

区别:

区别POPOOP
编程思想一种以过程为中心的编程思想一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分
特点分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用分类的方式进行思考和解决问题。面向对象先对整体关系作出分类,然后根据不同的类深入细节的处理。面向对象的思想符合人类的认知习惯。
优势性能比面向对象(因为类调用时需要实例化,开销比较大,比较消耗资源)易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点没有面向对象易维护、易复用、易扩展性能比面向过程低

面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观 上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过 程的思维方式。

2类&对象

什么是类?

: 是一类事物属性和行为的集合,可以看做一个模板

人类是一个类,它是对所有个体单位(人)的属性和行为进行抽象归类的一个集合

对象:对象是类的一个实例(对象不是找个女朋友),有属性和行为。

属性(成员变量):对于一个学生对象,属性有学号,班级,姓名

行为(成员方法):行为有上课,跑操,开班会

类与对象的创建

/*
	类创建:(不会占内存)
	class 类名{//一个java文件中只能有一个public class
		成员变量;//属性
		成员方法;//行为
	}
	实例化对象:(占有实际内存)
	1.类名 对象名;
	  对象名 = new 类名();
	  类名 对象名 =new 类名(参数列表);//构造方法
	2.new 类名();
	  new 类名(参数列表);//构造方法
	  
	声明方法:
	访问权限修饰符  返回值类型 数据类型 方法名(参数列表){}
	
	调用
         对象名.方法名(参数列表)/对象名.方法名;
         对象名.变量名;
*/
package JavaSE.Class;
public class people {
    public static void main(String[] args){

       people p=new people();
       p.name="lanlei";
       p.age=21;//通过对象访问属性并初始化赋值
       p.display();      
       new people("Vae",35).display();//通过构造方法初始化对象属性
    }
    public String name;
    public int age;
    public people(){}//无参构造器
    public people(String name, int age){//有参构造器
        this.name=name;
        this.age=age;
    }
    public void display(){
        System.out.println(name);
        System.out.println(age);
        return;
    }
}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2fGkpGh-1618750338459)(%E7%B1%BB&%E5%AF%B9%E8%B1%A1img/p1.jpg)]

类中的变量

  • 成员变量

定义在类中,方法体之外。

基本类型/引用类型。

可不初始化 (java为其赋默认值):整形:0 浮点型:0.0 布尔型:false char: 空 引用类型:null。

在创建对象的时候会从类中复制一份到对象中。

被类中方法、构造方法和特定类的语句块访问 。

作用范围为整个类。

  • 局部变量

在方法、构造方法或者语句块中定义的变量

基本类型/引用类型

在使用前必须初始化赋值

声明和初始化都是在方法中,方法结束后,变量就会自动销毁

package Test;
public class temp2 {
    public static void main(String[] args) {
        temp2 t=new temp2();
        t.name="Vae";
        System.out.println(t.name);
        //System.out.println(t.j);局部变量,对象无法直接使用,只在方法体执行
        t.print();
    }
    //成员变量  可不初始化
    private double balance;
    public String name;
    int i;
    //方法
    public void print(){
        String str;
        int j=10;//局部变量,必须初始化才能在方法或代码块中使用
        System.out.println(j);
        //System.out.println(str);
        //报错 Variable 'str' might not have been initialized:变量str未初始化
    }
}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnKTRMSu-1618750338463)(%E7%B1%BB&%E5%AF%B9%E8%B1%A1img/p2.jpg)]

类中的方法

/*成员方法:

[访问权限修饰符]  返回值类型 数据类型 方法名(参数列表){

​			方法体;

​			[return 返回值]

}

构造方法:
1给对象的属性初始化
2构造方法名与类名相同,无返回值,不用void 修饰
3如果没有显式地为类定义构造方法,Java将会为该类提供一个默认
构造方法,但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效
public 类名(){}//无参构造方法
public 类名(int a,String b){}//有参构造方法
*/
package Test;
public class temp2 {
    public static void main(String[] args) {   
        temp2 t=new temp2(133,"vae");//构造方法为其初始化
        t.display();//调用成员方法
    }
    //成员变量  可不初始化
    private double balance;
    public String name;
    int i;
    //成员方法
    public void display(){
        System.out.println(balance+"\r\n"+name);
    }
    //构造方法
    public temp2(){}//无参构造
    public temp2(double b,String n){//有参构造
        balance=b;
        name=n;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8qj5hBV-1618750338466)(%E7%B1%BB&%E5%AF%B9%E8%B1%A1img/p3.jpg)]

方法的重载

重载

1.概念:方法名相同,参数不同的多个方法

2.区分:

参数的个数,参数的类型,参数的顺序

注意:方法的重载和返回值无关

package homeworks.h5;

public class H5_5 {
    public static void main(String[] args) {
        System.out.println(max(1,2,3));
        System.out.println(max(1,2));
        System.out.println(max(1.0,2.0));
        System.out.println(max(5.1,1.2,3.4));
        max();
    }
    public static int  max(int a,int b,int c){
        int max=a>b?a:b;
        max=max>c?max:c;
        return max;
    }
    public static int  max(int a,int b){
        int max=a>b?a:b;
        return max;
    }
    public static double  max(double a,double b){
        double max=a>b?a:b;
        return max;
    }
    public static double  max(double a,double b,double c){
        double max=a>b?a:b;
        max=max>c?max:c;
        return max;
    }
    public static void  max(){
        System.out.println("asdfasd");
    }

}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fez39Pj3-1618750338470)(%E7%B1%BB&%E5%AF%B9%E8%B1%A1img/p4.jpg)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值