0.类与修饰词:(类的前,中都有)
private > 不写 > protected > public
类的声明:
【修饰符】class 类名 【extends 父类】【implements 接口】
单父类,多接口。
**Java定义完类后不用写;,C++需要写;
对象的比较:
-
== 和 !=:
比较2个***引用实例***是否相等。 -
equals():
比较2个***类内的值***是否相等。
特殊:
- Javac 文件.java时会生成所有类的 .class文件。
- 每个类都可以有1个自己的main函数,但仅又一个main函数会执行,其他的可以作为类单元的测试。
1·this:
- 用于指代当前对象自身(谁调用的,当前就是谁)。
Person a1 = this;
- 访问当前对象的变量和方法。
this.变量/方法(参数)
- 调用本类重载的构造方法。
只可以在构造函数中用,并且写在第一句。
2·构造方法:
无返回类型,方法名与class名相同。
拷贝构造方法:
Person(Person a)
Java中没有默认的拷贝构造方法。类采用“引用”,形参实参为1个空间。
当对象作为函数参数或者返回值,传对象引用。
C++中执行的时候传形式参数。
3·import:
不同包的文件可以使用 import 包路径 类名 来使用其他包文件。
如果有包的话,package语句必须放到d1行。
如果不同包有同名的类,引用类时必须写出 ”包路径.class名“ 。
4·继承(extends):
不支持多继承
可详见接口
class 子 extends 父{
...
}
- 父子同一个包:可以继承除private之外的所有。
- 父子不在同一包:只可以继承父的protected、public成员变量和方法。什么都不写的(默认的)不会继承。
ex:instanceof 运算符:
双目运算符,左面操作对象,右面操作类。
左是右的类或者子类创建的对象时,返回true。
5·方法重写与super:
在子类进行与父类完全一致的成员变量或方法会覆盖父类,称之为重写。
如果想使用被隐藏的变量或者方法,使用super.x / super.f()。
6·对象的上转型对象与多态:
假设A父B子:
A a;
B b = new B();
a = b;
或者
A a = new B();
此时 a 无法新增变量或方法。
利用 a 可以使用不同子类的不同方法。----》多态。
7·抽象类与多态(abstract):
abstract class A{
...
}
- 抽象类中可以有 普通或 abstract 方法。
- 只可以声明,不能使用 new 运算符创建该类对象。
- 如果一个非抽象类是某个抽象类的子类,那么必须重写父类的抽象方法。
- 如果一个抽象类是某个抽象类的子类,那怎样都行。
- 抽象类中抽象方法只能声明,不可实现。
eg:
父(abstract): Car
子:PoliceCar、FireCar、etc…
功能类:SoundMaker(内含发声功能)
public class SoundMaker{
void sound(Car car){
car.makesound();
}
}
创建功能性对象: SoundMaker sm = new SoundMaker();
使用对象的上转型对象:父类 car = new 子类();
sm.sound(car);
8·接口:
-
引入原因:Java只允许单继承,但是允许多继承的接口。继承—“是不是”;接口—“能不能”。
-
接口创建:
public interface 接口名{
常量(访问权限一定是public,允许忽略public、final)
public static final int MAX = 100;
int MAX = 100;//同上
方法(访问权限一定是public,允许忽略public、abstract)
public abstract void add(int a,int b);
void add(int a,int b);//同上
}
- 接口使用:
使用 implements 关键字声明自己实现一个个或者多个接口,用“,”隔开。
如果一个类实现了某个接口,就必须重写该接口的方法。
class A implements 接口1,接口2
class Dog extends Animal implements 接口1,接口2
-
接口特点:
没有构造器。
采用多继承机制。
主要用途就是被实现类实现。
和类是并列关系,一种特殊的抽象类,只包含常量和方法的定义。