初识JAVA---类、包、接口(4)

类是组成Java程序的基本要素

是一类对象的原型

它封装了一类对象的状态和方法,将变量和函数封装到一个类中

class Person{
    String name;
    int age;
    void sayHello(){
        System.out.println("Hello! My name is "+name);
    }
}

字段(field)是类的属性,是用变量来表示的  字段又称为(域、域变量、属性、变量成员)等

方法(method )是类的功能和操作,是用函数来表示的

 

构造方法constructor是一种特殊的方法 

用来初始化(new)该类的一个新对象

构造方法和类同名,而且不能返回数据类型,相当于初始化类,类的实例化,成了对象

Person(String n,int a){
name=n;
age=a;
}

一般来说类都有一个或多个构造方法,如果没有定义任何构造方法,系统会自动产生一个构造方法,即默认构造方法

 

方法重载,有多个方法相同的名字,编译时能识别出来  

       这些方法可能是参数不同,或者是参数类型不同(和C++差不多)

this 和C++中的类似  当前对象的代替

在构造方法中用this调用另一种构造方法

Person()
{
  this(0,"");
  .....
}

java里规定  它要写到括号里   其次它要放到最开头,不能放到其他语句后面

 

继承  

子类(subclass) 父类或超类(superclass)

父类包括所有直接或间接被继承的类

JAVA支持单继承:一个类只能有一个直接父类 (和C++不同 相当于简化了)

继承通过extends关键字来实现

class Student extends Person{
......
}

如果没有extends关键字,该类默认为java.lang.Object的子类

        所有的类都是通过直接或间接的继承java.lang.Object来得到的

举例   Student 继承Person

class Student extends Person{
    String school;//相当于新扩展的变量  java中叫字段
    int score;
    boolean isGood(){return score>80;}//相当于新扩展的方法
    //..
}

在继承过程中,子类可以继承所有父类的字段,可以添加字段,比如上面例子中的school score等,在继承过程中子类会获得父类非私有的方法。如果对父类的方法需要改写,那么重新定义与父类同名的方法,实现对父类方法的覆盖。方法的重载与C++类似,定义重名函数(参数不同),然后调用的时候它会自动找到对应的方法。

如果想调用被覆盖的父类的方法或者变量,可以用super关键字来实现。

 

综上,JAVA在继承父类时候,它的字段都和父类相同,如果你想更改,和C++类似  重新定义并赋值,实现了对父类的覆盖,如果想要调用父类的变量或者方法的时候,可以  当前对象.super.变量或方法   也可以直接用父类的对象来调用。

 

Package  包及子包的定义实际上是为了解决 类的名字冲突

       它与类的继承没有关系,实际上以个类与其父类可以处于不同的包中

包有两方面的含义:

       名字空间,存储路径

       可访问性(同一包中的各个类,默认情况下可以相互访问)

包层次的跟目录是由环境变量CLASSPATH来确定的,没有package语句称为无名包

java JDK中提供了很多包,java.applet   java.awt   java.awt.image  java.awt.peer  java.io    java.lang   java.net   java.util  java.swing等

 

使用JAVA中提供的类需要用Import导入    格式:import package1[.pacaage2...](classname|*);

例如    import  java.util.Date;    这样在程序中  java.util.Date 可以写成Date

import java.awt.* ;    注意使用*只能表示本层次中所有的类,不包括子层次下的类。

JAVA编译器自动导入  java.lang*;

 

修饰符分为两类   访问修饰符(private/public) 其他修饰符(abstract)

定义类的时候  前面加上public就可以被其他包的访问   如果什么也不加 默认形式,同包可以访问

在设计类的方法的时候,为了提高安全性对于修改的权限最好是private,只读模式还是可靠性高的。

其他修饰符:static    final   abstract

static:它们是类的字段,不输入任何一个 对象实例(和C语言不同)

          它保存在类的内存区域的公共存储单元

           类变量可以通过类名直接访问,也可以通过实例对象来访问 ,两种方法一样

          如:System类的in out对象,属于类的域直接用类名来访问  即System.in  System.out

class Person{
    static long totallNum;
    int age;
    String name;
}
totallNum代表总数  它与具体实例对象无关,可以Person.totallNum  和p.totallNum来访问
在一定意义上可以用来表示全局变量

static的几重含义:

(1)非static得方法是属于某个对象得方法, 在这个对象创建时,对象得方法在内存中拥有自己专用得代码段。而static得方法是属于整个类得,在内存中得代码段将随着类的定义而进行分配和装载,不被任何一个对象专有

(2)static方法 是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,

即static方法只能处理本类中的static域或调用static方法

(3)static方法中,不能访问实例变量,不能用this或super

(4)调用这个方法时,应该使用类名直接调用

 

final类  如果一个类被final修饰,说明类不能被继承,不可能有用子类

final 方法    final修饰的方法不能被子类所覆写

被static final两个修饰符限定的时候,它可以表示常量

 

在定义static final域时,若不给定初始值,按照默认初始化 (数值0  boolean为false  引用是null)

在定义final字段时,若不是static域,则不许且只能赋值一次,不能缺省

       这种域的赋值方式  1 在定义变量的时候赋值  2在每一个构造函数中赋值 

定义final局部变量时,也必须且只能赋值一次

 

abstract类,抽象类不能被实例化

abstract方法,抽象方法,作用:为所有子类定义一个统一的接口。

        抽象方法只需声明,不用实现,用(;)而不是{}格式如下

        abstract return Type abstractMethod([paramlist]);

抽象类中可以包含抽象方法,也可以不包含抽象方法,但是,一旦某个类中包含了抽象方法,这个类必须是抽象类

抽象方法在子类中必须被实现,否则子类仍然是抽象的

 

接口:某种特征的约定

      定义接口  interface  所有方法都自动是public abstract

      实现接口  implements    可以实现多继承    与类的继承关系无关

面向接口编程,而不是面向实现

   Flyable f=new Bird();

   Java中有大量的接口

接口作用

1 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系,从而在一定意义上实现了多重继承

2 通过接口可以知名多个类需要的实现的方法

3 通过接口可以了解对象的交互界面,不需了解对象所对应的类

例子

interface Collection
{
    void add(Object obj);
    void delete(Object obj);
    Object find(Object obj);
    int size();
}

interface 前面可以解public等修饰符修饰   默认是public

 

将上面接口抽象为下面统一的形式,接口的定义包括接口声明和接口体两部分

interface Declaration{

intarface Body;

}

最简单的接口声明如下:  interface interfaceName{....}

通常接口以able ible 结尾   表明接口能完成一定的行为

接口声明还可以包含对接口的访问权限以及它的父接口列表,完整表达如下:

[public] interface interfaceName[extends listOfSuperInterface]{.....}

punlic表明任意类都可以用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。

extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能由一个父类。子接口继承父接口中所有的常量和方法

 

方法定义的格式:

returnType methodName([paramlist]);

接口中只能进行方法的声明,不提供方法的实现,所以定义没有方法体,且用  ;  结尾。

在接口中声明的方法具有public和abstract属性。所以定义的时候这两个关键词是可以省略的

另外,如果在子接口中定义了和父接口同名的常量或相同的方法,则父接口中的常量被隐藏,方法被重载

 

接口的实现

在类的声明中用implements子句来表示一个类使用某个接口,在类实体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法,一个类可以实现多个接口。

class FIFOQueue Implements collection{
public void add(Object obj){

}
public void delete(Object obj){

}
public Object find(Object obj){

}
public int currentCount{

}
}
在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致

接口可以作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。Java运行时系统动态地确定该使用哪个类中的方法

把接口作为一种数据类型可以不需要了解对象所对应的具体的类,以前面所定义的接口Collection和实现该接口的类FIFOQueue  为例,下例中,我们以Collection作为引用类型来使用

class InterfaceType{//这里相当于是定义了一个接口类
public static void main(String args[]){
Collection c = new FIFOQueue();//从接口的角度理解  相当于c时 这个类的实例化  是一个新对象
...
c.add(obj);
...
}
}

接口中的常量 枚举

接口体中可以包含常量定义 

定义格式  type NAME=value;

在接口中定义的常量可以被实现该接口的多个类共享,它于c中用define 以及C++中用const定义的常量是相同的。

在接口中定义的常量常具有public static final的属性


总结:

完整的类的定义   放括号中的是可选项
[public][abstract|final]class className[extends superclassName]
[implements InterfaceNameList]{//类声明  如果多个接口InterfaceNameList 表示用逗号分开的接口
[public|protected|private][static][final][transient][volatile]type varibleName;
//成员变量声明,可以多个   上面关键字 transient  volatile和内存访问、线程相关后面会有
[public|protected|private][static][final|abstract][native][synchronized]
//关键词native表明了用c++等其他语言来写的    synchronized和线程有关后面会有
returnType methodName([paramList])//方法定义及实现,可为多个
[throws exceptionList]{//表明抛出什么异常
    statements
}
}
接口完整的定义

接口声明
[public]interface InterfaceName[extends superInterfaceList]{//接口声明
type constantName=Value;//常量声明,可为多个
returnType methodName([paramList]);//方法声明 可为多个
}

三种方法固定的声明方式
构造方法
className([paramlist]){
...
}
main()方法声明
public static void main(String args[]){
...
}
finalize()方法声明  析构方法  一般不用    
protected void finalize() throws throwable{
...
}

 

完整的java源文件

package packageName;//指定文件中的类所在的包,0个或1个

import packageName.[className[*]];//指定引入的类  0个或多个

public classDefinition//属性为public的类定义,0个或1 个

interfaceDefinition and classDefinition//接口或类定义,0个或多个

源文件的名字必须与属性为public的类的类名完全相同

在一个java文件中  package语句和public 类最多只能由1个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值