1、使用extends关键字表示继承,通过继承可以简化类的定义。
2、Java只支持单继承,可以有多重继承。
3、子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可以显示用super( args )调用父类的构造方法,如类的构造方法中没有显示的调用父类的构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法,相当于系统默认调用了一次super()。
【注】:一个类中如果定义了有参构造方法而没有重写无参构造方法,无参构造方法将失效。所以我们在定义类时,只要定义了有参构造方法,通常还要定义一个无参构造方法。
4、子类覆盖父类的方法时,覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回类型,且子类不能使用比父类中被覆盖方法更严的访问权限。
//基类Fruit
public class Fruit
{
String id; //1
void show(){}; //2
}
//扩展类Apple
public class Apple extends Fruit
{
String id; //3
void show(){}; //4
}
Apple apple = new Apple();//定义apple,类型:扩展类Apple;实例:扩展类Apple
Fruit fruit = apple; //定义fruit,类型:基类fruit; 实例:扩展类Apple。
fruit.id; //1
apple.id //3
fruit.show(); //4
apple.show(); //4这说明:
父子同名,属性的调用:看实际类型。因为这是静态匹配的,在编译时就做好了。
父子同名,方法的调用:看声明类型。因为这是动态绑定的(多态性),需要看实际对象。
建议把变量声明为父类类型,这样可以接收任何子类类型的。
Object object1 = new Circle();
Object object2 = new Rectangle();
display(object1);
display(object2);
public static void display(Object object)
{
if(object instanceof Circle)
{
((Circle)object).display();
}
else if (object instanceof Rectangle)
{
((Rectangle)object).display();
}
}再比如,覆盖Circle中的equals方法: public boolean equals(Object o)
{
if(o instanceof Circle)
{
return radius == ((Circle)o).radius;
}
return false;
}
Java中所有类(包括用户自己定义的类)都自动继承Object类,即Object类是所有类的父类。
返回对象的Hash码,Hash码是标志对象的唯一。
约定:若两个对象equals若返回的是true,则对象的散列码必须一致。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23953-9.html
就算原料里有虫卵但后续的磨粉再到高温烤熟密封包装都会让虫卵坏死
最低威慑日本海军的数量不能低于500枚
准备打仗