码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象

时间:2019-09-16 00:00:46      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:关系   deb   转换   根据   编译   类的属性   全局   oid   初始化   

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

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

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

 面向对象的特征

 

 

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

 

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

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

 

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

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

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

 

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

 

类与对象的关系

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

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

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

stati修饰符:

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

 

类的成员变量分为两种:

实例变量    (ps:也就是没有被static关键字修饰的变量)
静态变量
两者之间的区别:

 

访问静态变量

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种级别的访问控制

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

 


代码块

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

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

静态代码块不能存在于任何方法体内
不能直接访问实例变量和实例方法(上面说过了原因)
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中静态代码块 -->主方法-->构造块-->构造方法

面向对象

标签:关系   deb   转换   根据   编译   类的属性   全局   oid   初始化   

原文地址:https://www.cnblogs.com/caoxiangwang/p/11525100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!