1、在Java中,所有的类都直接或间接地继承了java.lang.Object类;
在Java中使用extends作为其扩展父类的关键词。
2、当扩展某个类时,该类的所有public成员都可以在派生类中被调用,
而private成员则不可以直接在派生类中被调用使用,如果想要与父类的private成员沟通,
就只能通过父类中继承下来的public()方法成员,如getX()何getY()
3、在扩展某个类时,可以一并初始化父类的构造函数,这可以使用super()方法达到,它表示调用父类的构造函数。
4、若只想基类中的某些成员被子类对象所使用,而不希望这些成员被其他外部对象直接调用,
可以使用protected关键词修饰。
5、类是对象的定义书,如果父类中定义并不符合需求,那么可以在扩展的同时重写。
可以重写方法的实现内容、成员的存取权限,或是成员的返回值类型。
重写时必须注意:可以增大父类中的方法权限,但不能缩小权限。
重写返回值类型有条件限制,重写的返回值类型必须是父类中同一方法返回类型的子类!
如果在定义方法成员时使用final,则表示该方法无法被子类重写。
如果在定义雷辉加上final,则表示要终止被扩展,无法被其他类继承。
6、super() 和 super
如果在派生类中调用基类的构造函数,可以使用super()方法;
若要在派生类中调用基类方法,则可以使用super.methodName()。
但是两者都是有条件的,即父类中的方法或构造函数不能使private。
7、多态实现指的是使用同一个实现接口,以实现不同的对象实例,主要是为了降低对实现接口的依赖程度。
现在假设Class1上定义了doSomething()方法,Class2上也定义了doSomething()方法,但我们定义了
两个execute()方法来分别实现Class1和Class2的实例:
与其依赖两个类,不如定义一个父类ParentClass类,其中定义有doSomething(),并让Class1和Class2都集成ParentClass类
并重写自己的doSomething()方法,这样就可以将程序汇中的execute()改成:
public void execute(ParentClass c)
{
c.doSomething();
}
这样就让程序对个别对象的依赖程度降低了。
8、实际上在设计类时并不依赖于具体类,而是依赖于抽象,java在实现多态时,可以让程序依赖于抽象类或是接口。
9、在Java中定义类时,可以仅声明方法名称而不操作其中的逻辑,即抽象方法;
如果一个类中包含了抽象方法,则该类称为抽象类,
抽象类是拥有未实现方法的类,所以它不能被用来生成对象,只能被继承扩展,并实现抽象方法。
10、接口可以想象成一个完全没有任何方法被实现的抽象类。
要注意的是:接口只能声明,不能实例化,只能有类继承接口才能实例化!!!
实现某接口的类必须实现该接口所定义的所有方法,一个对象可以实现多个接口,但只能单继承。
11、接口的声明是使用interface关键词,声明方式如下:
[public] interface 接口名称
{
权限设定 返回类型 方法(参数列);
权限设定 返回类型 方法(参数列);
//...
}
在声明接口时方法上的权限设定可以省略,如果省略,默认是public。
下面是一个范例:
【IRequest.java】
只要知道IRequest定义了什么方法,就可以实现HelloRequest和WelcomeRequest的实例,而不用知道传入的对象到底是什么类的实例。
示范如下:
{
//接口实现
}
当实现多个接口时,记得必须实现每一个接口中所定义的方法。
接口也可以进行继承,同样是使用extends关键词来继承父接口。例如:
public interface 名称 extends 接口1,接口2
{
//...
}
不同于类一次只能继承一个父类,一个接口可以同时继承多个父接口。
在Java中使用extends作为其扩展父类的关键词。
2、当扩展某个类时,该类的所有public成员都可以在派生类中被调用,
而private成员则不可以直接在派生类中被调用使用,如果想要与父类的private成员沟通,
就只能通过父类中继承下来的public()方法成员,如getX()何getY()
3、在扩展某个类时,可以一并初始化父类的构造函数,这可以使用super()方法达到,它表示调用父类的构造函数。
4、若只想基类中的某些成员被子类对象所使用,而不希望这些成员被其他外部对象直接调用,
可以使用protected关键词修饰。
5、类是对象的定义书,如果父类中定义并不符合需求,那么可以在扩展的同时重写。
可以重写方法的实现内容、成员的存取权限,或是成员的返回值类型。
重写时必须注意:可以增大父类中的方法权限,但不能缩小权限。
重写返回值类型有条件限制,重写的返回值类型必须是父类中同一方法返回类型的子类!
如果在定义方法成员时使用final,则表示该方法无法被子类重写。
如果在定义雷辉加上final,则表示要终止被扩展,无法被其他类继承。
6、super() 和 super
如果在派生类中调用基类的构造函数,可以使用super()方法;
若要在派生类中调用基类方法,则可以使用super.methodName()。
但是两者都是有条件的,即父类中的方法或构造函数不能使private。
7、多态实现指的是使用同一个实现接口,以实现不同的对象实例,主要是为了降低对实现接口的依赖程度。
现在假设Class1上定义了doSomething()方法,Class2上也定义了doSomething()方法,但我们定义了
两个execute()方法来分别实现Class1和Class2的实例:
public void execute(Class c1)
{
c1.doSomething();
}
public void execute(Class c2)
{
c2.doSomething();
}
很显然,程序中execute()分别依赖于Class1和Class2两个类。
与其依赖两个类,不如定义一个父类ParentClass类,其中定义有doSomething(),并让Class1和Class2都集成ParentClass类
并重写自己的doSomething()方法,这样就可以将程序汇中的execute()改成:
public void execute(ParentClass c)
{
c.doSomething();
}
这样就让程序对个别对象的依赖程度降低了。
8、实际上在设计类时并不依赖于具体类,而是依赖于抽象,java在实现多态时,可以让程序依赖于抽象类或是接口。
9、在Java中定义类时,可以仅声明方法名称而不操作其中的逻辑,即抽象方法;
如果一个类中包含了抽象方法,则该类称为抽象类,
抽象类是拥有未实现方法的类,所以它不能被用来生成对象,只能被继承扩展,并实现抽象方法。
10、接口可以想象成一个完全没有任何方法被实现的抽象类。
要注意的是:接口只能声明,不能实例化,只能有类继承接口才能实例化!!!
实现某接口的类必须实现该接口所定义的所有方法,一个对象可以实现多个接口,但只能单继承。
11、接口的声明是使用interface关键词,声明方式如下:
[public] interface 接口名称
{
权限设定 返回类型 方法(参数列);
权限设定 返回类型 方法(参数列);
//...
}
在声明接口时方法上的权限设定可以省略,如果省略,默认是public。
下面是一个范例:
【IRequest.java】
public interface IRequest
{
public void execute();
}
【HelloRequest.java】
public class HelloRequest implements IRequest
{
private String name;
public HelloRequest(String name)
{
this.name = name;
}
public void execute()
{
System.out.println("Hello, " + name);
}
}
【WelcomeRequest.java】
public class WelcomeRequest implements IRequest
{
private String place;
public WelcomeRequest(String place)
{
this.place = place;
}
public void execute()
{
System.out.println("Welcome to " + place);
}
}
虽然HelloRequest和WelcomeRequest是两种不同的类型,但都实现了IRequest,所以设计一个doRequest()方法,
只要知道IRequest定义了什么方法,就可以实现HelloRequest和WelcomeRequest的实例,而不用知道传入的对象到底是什么类的实例。
示范如下:
public class RequestDemo
{
public static void main(String[] args)
{
for(int i = 0; i < 10; i++)
{
//random()返回大于等于 0.0 且小于 1.0 的伪随机 double 值
int n = (int)(Math.random() * 10) % 2;
switch(n)
{
case 0:
doRequest(new HelloRequest("Freedom"));
break;
case 1:
doRequest(new WelcomeRequest("Wiki Website"));
break;
}
}
}
//接口类似多态?
public static void doRequest(IRequest request)
{
request.execute();
}
}
12、在Java中可以一次实现多个接口,实现多个接口的方式如下:
public class 类名称 implements 接口1, 接口2, 接口3{
//接口实现
}
当实现多个接口时,记得必须实现每一个接口中所定义的方法。
接口也可以进行继承,同样是使用extends关键词来继承父接口。例如:
public interface 名称 extends 接口1,接口2
{
//...
}
不同于类一次只能继承一个父类,一个接口可以同时继承多个父接口。