java接口文件定义类_Java入门笔记(四)类、包和接口

一、类 class

public class Person{

String name;

int age;

Person(String name, int age){

this.name = name;

this.age = age;

}

void sayHello(){

System.out.println("Hello!");

}

}

1. 属性

a. 字段

也就是成员变量,在构造方法中进行初始化,没有指针的概念,需要访问时直接使用p.name的方法

仍旧可以用this.表示域内的变量

b. 方法

构造方法

constructor,方法名与类名相同,如果不定义构造方法,系统会定义一个默认构造方法

this中还可以使用this调用另一构造方法,如在person类中添加

Person(){

this("lilei", 0); // 这条调用语句要放在第一行

}

方法重载

方法的参数个数或者参数的类型不同,通过重载可以实现多态(polymorphism)

c. 修饰符

访问修饰符()+其他修饰符(abstract等)

访问修饰符

public(非子类、子类、同包类、自身)、protected(子类、同包类、自身)、private(自身),默认(同包类、自身)

字符用private修饰从而更好地封装和隐藏,但是可以用setter和getter暴露出来,bean规范

其他修饰符

static

静态的,可以修饰内部类和成员

不保存在某个对象的内存中,而是存储在公共存储单元中,如System类的in和out

属于整个类,不能操纵某个对象的成员变量,只能调用static域或者static方法

不能访问实例变量,不可以使用this和super

使用类名直接调用static方法

import static

final

最终的,不可改变的,可以修饰类、成员、局部变量

如果修饰类,表示这个类不可以被继承

如果修饰方法,就是不能被子类覆盖的方法

如果修饰字段,那么一旦给定值,就不可以修改,且必须显式赋值(定义时赋值或构造函数总能赋值)

如果修饰局部变量,可以从变量中取值,final a = b;

static final可以表示常量,如Integer.MAX_VALUE,如果不给初始值,就默认进行初始化

abstract

抽象的,不可实例化的,可以修饰类和成员

如果修饰类,该类不可以被实例化,不可以new

如果修饰方法,则不需要实现,只声明即可

如果一个类中包含了抽象方法,那么这个类就要被声明为abstract类,而在子类中实现,如果子类中仍然没有实现,那么子类也需要abstract

2. 继承

class Teacher extends Person{

String school;

String subject;

void teach(){}

}

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

父类包括所有直接或间接被继承的类,一个子类只能直接继承于1个类,子类可以继承、修改、添加父类的状态和行为,但是构造方法是不能够被继承的

没有继承关系则类默认为java.lang.Object对象

a. 方法覆盖 Override

@Override

void sayHello(){

System.out.println("Hello everybody!");

}

b. 方法重载

void sayHello(Teacher another){

System.out.println("Hey!");

}

c. super

可以用来访问父类的字段和方法,构造方法不能被继承,但是使用super可以调用父类的构造方法

Teacher(String name, int age, String school){

super(name, age);

...

}

d. 父类子类的转换

子类对象可以视为父类的一个对象

父类对象不能当做子类的对象

如果一个方法的形参是父类对象,调用方法时可以用子类

如果父类引用的实际上是一个子类对象,那么可以强制类型转换为子类对象的引用,如Person liu = new Teacher(xxx);可以使用Teacher wang = (Teacher) liu;

二、包 package

import package[.pkg[.xxxx]]

包实际是为了解决名字空间(存储路径)问题和可访问性问题(同一个包里面的各个类可以互相访问)

包层次的根目录由CLASSPATH决定,如果没有package语句,就是无名包

java编译器自动导入java.lang

javac可以将.class文件放入想用的目录,使用-d指明包的根目录,运行程序时指明含有main的类名

java和javac可以用-classpath指明引用的类的路径,也可以设置系统变量

三、接口 Interface

接口就是一个高度抽象的类,用来描述某种特征,所有的方法都是public abstract,java8以上还可以声明static方法以及具有实现的方法

实现接口时需要使用implements,可以实现多继承,与继承是无关的

面向接口编程而不是面向实现,Interface = new class()

可以实现不相关类的相同特征,通过接口可以指明多个类需要实现的方法

接口中定义的常量可以被实现该接口的多个类共享,通常全部大写

interface Transport{

int INITIAL = 100;

double getSpeed();

}

public Car implements Transport{}

四、语法小结

完整的类的定义

[public] [abstract | final] class [extends ]

[implements] [InterfaceNameList(,分割)]{

[public | protected | private] [static] [final] [transient] [volatile] type variableName;

[public | protected | private] [static] [final | abstract] [native] [synchronized] returnType methodName()[throws]

}

完整的接口的定义

[public] interface InterfaceNmae [extends superInterfaceList]{

type constantName = Value;

returnType methodName();

|

固定声明方式

构造方法

className(){}

main方法

public static void main(String args[])

finalize()方法

protected void finalize() throws throwable{}

完整java文件

package packageName; // 只能有1个

import packageName.xxx.*;

public classDefinition{} // public的类的定义 0或1个

interfaceDefinition and classDefination //0或多个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值