Java——第五章(面向对象编程)

来源:互联网 发布:淘宝开店必备条件 编辑:程序博客网 时间:2024/05/28 17:07


提到面向对象编程,我要提到一点,这个应该是java中最核心,也是最难的一部分了,莫非难于上青天??。




但是,,,不要担心,小编自会让你攀顶,突破阻碍了。。




先来谈谈什么是面向对象,面向对象的思想是什么?


java是最接近自然语言的高级编程语言,万事万物皆对象,树是一个类,鸟也是一个类,柳树是一个对象,麻雀是一


个对象,空气是一个对象,水是一个对象,人也是一个对象……


而这些对象的特征,形象就是对象的属性,而这些对象的行为动作,就是对象的方法。


以现实世界中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对


象,作为系统的基本构成单位,这样,世界似乎就显示的很条理了。。


在面向对象这一章会提到四个概念,类、对象、属性、方法。


类对于对象是抽象的,类不能直接使用,对象可以,对象是属于类的,通过对象来访问类,类=属性+方法,同样,对


象也=属性+方法。


类的属性也就是对象所具有的特征,例如对象的名字。属性中有权限修饰,属性类型,属性名。


eg:private String name;


权限修饰:public、protected、default、private。


public : 公共的,被其修饰的属性或方法可以在本项目中调用。


protected: 被保护的,被其修饰的属性或方法可以在本包内调用。


default : 默认的,被其修饰的属性或方法可以在本包内调用。


private : 私有的,被其修饰的属性或方法可以在本类内调用。


属性类型同第二章的变量类型、String。


万事万物皆对象,方法是对象的行为动作,实现的功能。方法又分为普通功能方法和构造方法。


普通方法:方法:用来实现某个功能。

权限访问 返回类型  方法名(参数列表)
{
方法体
}

eg: public void Add(int a ,int b)

{

  System.out.println("两数之和:"+a+b);

}


构造方法:无参构造方法和全参构造方法,部分 参数基本不用。


无参构造方法:

public 类的名字(无参数)
{
}


全参构造方法:

public 类的名字(类所拥有的全部属性)
{
属性的初始化
}


java中有三大特性,信息的封装和隐藏、继承、多态。


信息的封装和隐藏是指权限修饰用private修饰,用来限制外部访问。标准javabean就是典型的信息封装。


这里提到的javabean是指一种类的形式。具有私有属性、构造方法(全参构造方法、无参构造方法)、


setters() and getters()方法、to String()方法、hashcode() and equals()方法。


拥有这些属性或方法的类,就是一个标准的javabean,javabean是java中的数据流通格式。


setters and getters方法用来设置和获得类的私有属性,to String方法用来打印出属性的值,


hashcode和equals方法用来判断地址和内容是否相等。那么,


既然java语言是最接近自然语言的,子女是可以继承父母的东西,同样java中也有继承关系,为了减少代码的重复编


写,使得代码更简洁,更接近自然语言,如果父子关系,子


类继承父类,继承而得到的类称为子类,被继承的类称为父类。例如学生类继承人类,学生是子类继承父类人类,人


类有名字,年龄等属性,同样学生类中也有,不用重复写继


承过来的属性或方法,拥有父类的全部属性和方法,不过在父类中用private修饰的子类访问不到。


例如:若已存在子类b,子类a要继承子类b,public class a extends b{   }。a类继承b类,a为子类,b为父类。


a中具有b中所有的属性和方法。



子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变


量。重写时方法名必须一致。

父类中所有属性和方法 子类都有java中是单继承,一个子类只能拥有一个父类。


子类可以自行添加自己的属性和方法。继承过来的属性是 独特的属性,必须通过调用父类的构造方法来初始化。


super()  必须放在第一行  。


提到继承,不得不说一下抽象类,抽象类是对于类的抽象,通过子类来具体化。描述某些方法体不确定的事物。

在开发中,有时候不知道具体实施的方法是什么,但是确确实实有这个方法存在,所以出现了抽象类。


例如:都知道工具类中有工具的使用方法,但是没有指定哪个工具,工具中的方法是不确定,不明确的,所有可以用


抽象类代替工具方法。

这种只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没


有“{}”。


那抽象类长啥样?怎么用呢?




抽象类需要在class前面添加abstract修饰,形式长这样:


public abstract class Tool
{

(可能存在的)

  属性
  普通功能方法
 抽象方法 public abstract void xxx ();
 构造方法

}


子类继承抽象类。需要重写抽象类中所有抽象方法(切记!),同样继承父类属性方法,普通方法不需重写,不过抽


象方法得重写。


public class subclass extends Tool{
public void xxx()
    {       }
}



自己呢,总结出抽象类中需要注意的地方:


1.抽象类中可以有抽象方法,也可以没有抽象方法。

2.抽象方法一定在抽象类中。

3.抽象类可以和普通方法一样拥有属性和方法。

4.抽象方法甚至可以拥有构造方法,用来给子类使用super()初始化从父类继承过来的属性。

5.抽象类可以有static修饰的方法。


可能也有很多人有疑问,关于static,super这些东西不太了解,那么,接下来就是讲一下咱们常见到的关键字。


常见的关键字大概有这么些个: this、super、final、static。


this呢,代表着当前类的对象,在创建这个类的时候,类中不知道main方法中具体的对象叫什么,所以表示着未来对


象的引用,eg: Student s = new Student();

在构造方法中的this指的就是之后创的student 的s对象。通过this.方法相当于s.方法来调用。this调用本类的构造


方法也是要放第一行。


super关键字,代表着父类,super.调用的方法为父类的方法,super也可以调用父类的属性。常在构造方法中第一行


用super继承父类的方法或属性。


final,意思就是最后的,最终的。顾名思义,都是最后了肯定不能对他加以改造了。。


1.用final 修饰的属性,一经初始化则不能修改(最后的,已定型)。

2.用final修饰的方法,不能被重写(最后了都,不能出现分歧)。

3.用final修饰的类,不能拥有子类,不可被继承(都是最后一代了。。)。




重点在于static这个关键字,static表示的是静态,是被所有对象所共享的。


1.不能和this,super关键字联用,因为static是静态的,不靠具体对象实施,基本上是和对象没关系,当然也是可


以对象调用,但一般不这么用,一般通过类直接调用属性或方法。


2.用static修饰的属性或方法,其实都是将他们放在了静态堆栈里面,为所有类所共享。属性一经改变,之后的引用


该属性都将改变。

静态堆栈里   如果两个对象一致  只创建一次。

3.static {
静态代码块
}

static代码块在加载类的时候先执行,之后如果有构造方法才执行构造方法。

所有被静态修饰的属性和方法为所有的对象共享。


静态代码块 优先于 任何方法和语句的执行。


提到加载类,说一下程序的运行顺序,


程序的执行顺序是先加载主类(若主类有static代码块,要先执行代码块中内容)----》执行main方法


然后加载其他类---》加载属性(父类---》子类)----》构造方法(父类---》子类)


之前咱们有讲到java是单继承,所以很多时候单继承不方便,那java有没有多继承的呢?答案是  有!接口就是多


继承的。


接口类似于标准。标准是用来制定,约束的。但实施者并不是标准,标准只是纸质说明而已,真正实施的还是安排的


人员。例如宿舍管理规则,违反后规则并不能惩罚你,而是


楼管大爷教育你。

标准定义:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此


这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。


接口的形式:


public interface 接口名{
public static final 属性类型 属性名;
public abstract 返回类型  方法名;
}

接口中的方法不允许有构造方法,方法均为抽象方法。


那么,问题来了,那怎么实现接口呢?接口实际上是抽象类的抽象,通过实现类来实现接口。


实现类实现接口用关键字implements 来修饰。

例如:public class User implements Person
{
重写所有抽象方法。
}


User类是实现类,实现Person接口的所有抽象方法。


接口可以是多继承,接口的实现也是多继承。

多重实现:
public class xxx1 implements inter1,inter2{

}



接口中的属性用常量,用static final修饰的变量名,就是常量。可以直接写常量类型加常量名。


默认为public static final。


接口中的抽象方法可以直接写返回类型和方法名,默认为public abstract 。

接口是抽象类的抽象。


接口似乎看起来和抽象类有点类似,但其实不是。。那咱们做一个区分。


1.抽象类是class   接口为interface

2.接口中属性只能是常量,抽象类属性不一定是常量。

3.接口中只能有抽象方法,抽象类中可以有普通方法,可以没有抽象方法。

4.抽象类中能定义static 方法,而接口中不允许有static方法,因为需要重写嘛。

5.抽象类可以有构造方法 ,  接口没有构造方法。


还剩下最后一个特性,多态。多态多态,顾名思义就是多种形态、状态。在面向对象语言中,接口的多种不同的实现


方式即为多态。


父类留有子类对象的引用,子类可以对父类进行赋值。


例如:

Student继承Person类           


Person p = new Student();

编译时p为Person类,运行后是Student类,父类留有子类的引用。很多时候将父类设为object类,因为他是所有类的


父类,创建他的对象,在各个方法中更容易管理,想要设置


成其中某一个类的对象,只需改变object中对象即可,通过强制类型转换。


还有一种说法,多态可以分编译时的多态和运行时的多态,编译时的多态即方法的重载,运行时的多态即方法的覆盖


(重写)。


有一个需要大家了解知道的对象,那就是成品的软件一般有三层架构,视图层,业务逻辑层和数据库连接层。视图层


可以是Android中设计界面,业务逻辑就是java后端运行的


代码,将业务逻辑层的数据用数据流通格式javabean封装起来,通过创建类的beandao,通过类的beandao实现顶层接


口设计,调用sql语句将javabean导入数据库。



整个第五章java面向对象程序编程基本上就讲完了,至于细节问题,之后发现会有补充。















2 0
原创粉丝点击