版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Java——继承和多态
本人是个新手,写下博客用于自我复习、自我总结。
如有错误之处,请各位大佬指出。
参考教材:零基础学Java
继承时,把通用操作与方法放到父类中,这样可以避免代码重复继承时,不要使用protected字段。
当不希望自己的类再被扩展时,可在类的声明前加上final,这样此类就不能再被继承。
在创建子类对象时,先执行父类的构造函数,初始化继承自父类的成员,然后执行子类的构造函数,初始化子类的成员。
在Java中,一个类只能继承一个父类,即单继承。
子类的访问控制符权限只能等于或大于父类,即子类覆盖父类方法。
类与类之间的关系:依赖、聚合、继承
1)依赖:类中的方法可以操作另一个类的实例。在程序设计中,尽量减少相互依赖类的数量。
2)聚合:一个类中包含了另一个类。
多态:拥有相同的形式,但不同的参数实现不同的功能。重载就具有多态性。多态有两种表现形式:重载和覆盖。
超类:在Java中,其类库中所有的类都从Object类中继承而来。即Object类是Java类库中所有类的父类,但在书写类的时候,不用这么写:class student extends Object; 因为系统自动认为Object是student类的父类。
equals方法在Object类中,用于测试一个对象与另一个对象是否相等。对对象来说,就是判断两个对象是否指向同一个内存区域。其实,字符串处理中的equals方法覆盖了Object类中的equals方法。
有时可以使用Object类型的变量,来代表任何类型的对象:
Object obj=new student();
有时可以将数据类型直接转换成Object类型的变量:
Object obj=(Object)x;
class inhert{
//构造函数 系统默认的构造函数不带参数,如果需要带参数,需要自己书写
inhert(){
a=10;
b=20;
}
inhert(int a) {
this.a=a;
b=10;
}
inhert(int a,int b){
this.a=a;
this.b=b;
}
public int a;
public int b;
void print(){
System.out.println("a:"+a+" b:"+b);
}
}
public class ExtendsAndPolymorphic extends inhert{
private int c;
ExtendsAndPolymorphic() {}
ExtendsAndPolymorphic(int a,int b,int c){
super(a,b); //调用父类带两个参数的构造函数
this.c=c;
}
void print(){
System.out.println("a:"+a+" b:"+b+" c:"+c);
}
public static void main(String args[]){
//测试构造函数
inhert ob1=new inhert();
ExtendsAndPolymorphic ob2=new ExtendsAndPolymorphic(1,2,3);
ob1.print();
ob2.print();
//利用多态性质调用相应方法
ExtendsAndPolymorphic ob3=new ExtendsAndPolymorphic();
ob3.print(2);
ob3.print(2,3);
ob3.print(2,3,5);
ob3.print(1.1);
ob3.print(1.1,2.2);
ob3.print(1.1,2.2,3.3);
}
/*以下为(多态)重载函数*/
void print(int x)
{System.out.println(2*x);}
void print(int x,int y)
{System.out.println(2*x+y);}
void print(int x,int y,int z)
{System.out.println(2*x+y*z);}
void print(double o)
{System.out.println(2*o);}
void print(double o,double p)
{System.out.println(2*o+p);}
void print(double o,double p,double q)
{System.out.println(2*o+p+q);}
}