面向对象

面向对象乃是Java语言的核心,是程序设计的思想。Java语言的面向对象技术包括了面向对象面向过程的基本概念,面向对象的特征,Java语言的对象修饰符抽象类等一系列的知识点

首先让我们来了解一下什么是对象?

        没错!要了解面向对象我们肯定需要先知道对象到底是什么玩意儿。关于对象的理解很简单,在我们的身边,每一种事物的存在都是一种对象。总结为一句话也就是:对象就是事物存在的实体。下面举个简单的例子,比如人类就是一个对象,然而对象是有属性和方法的,那么身高,体重,年龄,姓名,性别这些是每个人都有的特征可以概括为属性,当然了我们还会思考,学习,这些行为相当于对象的方法。不过,不同的对象有不同的行为

 面向对象的特征



封装:就是把属性私有化,提供公共方法访问私有对象。举个简单的例子,我们去Apple店里买个iPhoneX,我们不需要知道它是怎么制造的,我们只需要知道它能用来打电话,上网和用来装B就行了。对于程序设计,用户只需要知道类中某个方法实现了什么样的功能,需要该功能的时候直接去调用就行了,不用去关心方法内部的实现细节


继承:当多个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它类继承这个父类。继承后子  类自动拥有了父类的属性和方法,比如猫,狗,熊猫他们共同的特征都是动物,有颜色,会跑,会叫等特征。我们可以把这些特征抽象成我一个Animal类(也就是父类)。然而他们也有自己独特的特性,比如猫会抓老鼠,喵喵叫,熊猫有黑眼圈,能吃竹子,狗会汪汪。于是我们就根据这些独特的特征分别抽象出来Cat,Dog,Panda类等。他们拥有Animal类的一般属性和方法,也拥有自己特有的某些属性和方法。

但特别注意的是,父类的私有属性(private)和构造方法不能被继承。另外子类可以写自己特有的属性和方法,目  的 是实现功能的扩展,子类也可以复写父类的方法,即方法的重写。子类不能继承父类中访问权限private的成员变量和方法 


多态:简单来说就是“一种定义,多种实现”。同一类事物表现出多种形态。Java语言中有方法重载对象多态两种形式的多态

      方法重载:在一个类中,允许多个方法使用同一个名字,但是方法的参数不同,完成的功能也不同

      对象多态:子类对象可以与父类对象进行相互转换,而且根据其使用的子类的不同,完成的功能也不同


抽象:抽象是从许多事物中,舍弃个表的,非本质的属性,抽取出共同的,本质的属性的过程。例如教师,学生和工人,他们共同的特质是人类,既然是人类就有共同的属性:性别,年龄,身高,体重等。抽象的过程就是比较的过程,通过比较找出事物之间的共同属性,通过比较区分本质。


类与对象的关系

    所有的事物都可以看做是一个对象,是对象就具有一定的属性和功能,这些对象是可以建立起联系的,而且这些对象是由类来构造的。类是具有属性和方法的一组对象的集合,对象是实际存在的该类事物的个体

   在面向对象中,类和对象是最基本和最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象,对象就表示一个个具体的东西,对象是以类模板创建的。

   举个简单的例子:兰博基尼跑车,在工厂里首先要由设计师设计出一个汽车图纸,然后再根据图纸去生产兰博基尼,这样生产出来的每一辆跑车结构和功能都是一样的。但是不同的款式有不同的特征,比如车的颜色,内部装饰,马力等。在这个例子中,设计图纸就是一个类,它规定看跑车应该拥有的基本部件。而根据这张图纸生产出来的每一辆跑车就是一个个实时存在的对象。它们的初始状态是一模一样的,如果其中某一辆颜色,发动机重新改了之后并不影响其他的跑车。


stati修饰符:

       static关键字的中文含义是静态的意思。使用static修饰的成员变量,常量,方法和代码分别称为静态变量,静态常量,静态方法,静态代码块,它们统称为静态成员。静态成员归整个类所有,不依赖特定的实例,被类的所有实例所共享的。只要被JVM加载就可以根据类名在全局数据区内找到


类的成员变量分为两种:

  1. 实例变量    (ps:也就是没有被static关键字修饰的变量)
  2. 静态变量

两者之间的区别:


访问静态变量

public class StaticDemo01 {  
    public static int ticket=10;                    //定义静态变ticket  
    public void sell(){                             //定义tell()方法  
        ticket--;  
        System.out.println("剩余:"+ticket);  
    }  
    public static void left(){                      //定义left()方法  
        int i=ticket-2;  
        System.out.println("还剩余:"+i);  
    }  
    public static void main(String[] args) {  
        int x=ticket--;                             //直接访问ticket  
        System.out.println("x="+x+",ticket="+ticket);  
        int y=StaticDemo01.ticket--;                //通过类名访问ticket  
        System.out.println("y="+y+",ticket="+ticket);  
        StaticDemo01 st1=new StaticDemo01();  
        int k=st1.ticket--;                         //通过实例访问  
        System.out.println("k="+k+",ticket="+ticket);  
        StaticDemo01 st2=new StaticDemo01();  
        st2.sell();                             //通过非静态方法访问ticket  
        left();                                 //通过静态方法访问ticket  
    }  
}  


      静态方法和和静态变量一样,可以不通过本类的实例对象而通过“类名.静态方法名”就可以调用。静态方法不能访问本类的实例变量和实例方法。因为静态资源在编译时(对象未实例化时)就被加载了,而非静态资源在运行时才被加载,多以静态方法只能调用静态变量,不能调用非静态资源!~

    实例方法就不一样了,可以访问静态和非静态成员,包括静态变量、静态常量、静态方法,实例变量和实例方法。


变量的作用域



访问控制符

     Java语言中,访问修饰符可以出现在类,成员变量,成员方法以及构造方法前,用来控制权限。Java提供了4种级别的访问控制

  1.  public   权限最宽    修饰的类,属性,方法不仅可以跨类还可以跨包访问
  2. private  权限最狭隘  修饰的类,属性,方法只能被该类的对象访问,即使是其子类也不能访问! 做的很绝-.-
  3. protected  介于public和private之间 修饰的类,属性,方法能被该类的对象,本包,子类访问(即使没和父类在同一包中)
  4. default   默认访问模式,只向同一个包中的类公开,即同包访问。



代码块

    代码块分为普通代码块构造块静态代码块

    静态代码块主要用于初始化类,为类的静态属性初始化,有以下几个特点:

  1. 静态代码块不能存在于任何方法体内
  2. 不能直接访问实例变量和实例方法(上面说过了原因)
  3. JVM在加载类时就会执行静态代码块,所以静态代码块优先于主方法执行

  

class Code{  
    {                                           //构造块  
        System.out.println("Code的构造块");  
    }  
    static{                                     //静态代码块  
        System.out.println("Code的静态代码块");  
    }  
    public Code(){                              //构造方法  
        System.out.println("Code的构造方法");  
    }  
}  
 
public class  Codeblock03{  
    {                                           //构造块  
        System.out.println("Codeblock03的构造块");  
    }  
    static{                                     //静态代码块  
        System.out.println("Codeblock03的静态代码块");  
    }  
    public Codeblock03(){                       //构造方法  
        System.out.println("Codeblock03的构造方法");  
    }  
    public static void main(String[] args) {  
        System.out.println("Codeblock03的主方法");  
        new Code();                             //创建Code对象  
        new Code();                             //创建Code对象  
        new Codeblock03();                      //创建Codeblock03对象  
        new Codeblock03();                      //创建Codeblock03对象  
          
    }  
}  


从程序的运行结果我们可以发现,在public类中的静态代码块优先于主方法执行,主方法由于构造块执行,够造块优先于构造方法执行。但是值得我们注意的是,无论创建多少个对象,静态代码块只会执行一次


程序中的执行顺序   

        public中静态代码块 -->主方法-->构造块-->构造方法


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值