父类与子类,继承的好处就在这,虽然耦合高了点,但子类在class外可以直接调用父类的属性和方法。
包里就是这些东西
B.JAVA
package Father;
class A
{
int a;
A(int a)
{
this.a=a;
System.out.println("this is A constructor");
}
void show()
{
System.out.println("this is show method in A");
}
}
public class B extends A{//子类会默认自动先调用父类(无参)构造方法,再调用自己的无参,当父类只有有参构造方法会报错(子无构造方法时),子类需添加一个构造方法
int a;
B(int x,int y)
{
super(x);//利用x调用父类带(1)参构造方法为父类中的a赋值 当希望子类调用父类构造方法时使用super实现
a=y;
System.out.println("this is B contructor 父类中的a:"+super.a+"子类中的a:"+a);//通过super获取父类被隐藏的属性因为子类也含a,我觉得A.a也可以,此处用super
}
void show()
{
super.show();//当需要覆盖父类方法时用super.方法名(实参或无参) 调用
System.out.println("this is show method in B");
}
public static void main(String[] args)
{
B b=new B(3,9);
b.show();//子类中调用父类默认方法
}
}
Base.java
package Father;
//不同包中的子类对父类调用,父类并未包含主函数,使用时可将只做父类的类放在同一个包中,供后续使用;
public class Base {
private void out1()
{
System.out.println("this is private method");
}
void out2()
{
System.out.println("this is 默认 method");
}
protected void out3()
{
System.out.println("this is protected method");
}
public void out4()
{
System.out.println("this is public method");
}
}
UseFig.java
package Father;
//abstract 1.用于抽象类
// 2.用于抽象方法
//定义抽象类
abstract class Fig//抽象方法必须定义在抽象类中,抽象类,无具体实例对象的类,目的:出于组织层次需要的考虑,不能创建抽象类的对象
{
int x,y;
//定义抽象方法
abstract double area();//无函数体且无括号,抽象方法无具体方法,子类调用(变更方法实现非常方便)非常灵活
Fig(int a,int b)//定义两参构造方法,抽象类中也可定义非抽象方法
{
x=a;y=b;//不同子类必有的构造方法 为父类传参,再回馈子类的不同方法,abstract 可以直观统一方法名,并进行不同的运算
}
}
class Rect extends Fig
{
//调用父类构造方法
Rect(int a,int b)
{
super(a,b);
}
//计算矩形面积
double area()//父类中定义了抽象方法必要在子类中调用,否则会报错(定义抽象方法多此一举)
{
return x*y;//可(一般)使用父类参数省的子类多项重复定义
}
}
class Tria extends Fig
{
//==通过自身构造方法调用父类构造方法
Tria(int a,int b)
{
super(a,b);
}
double area()//再次定义abstact方法
{
return 0.5*x*y;
}
}
public class UseFig {
//定义静态方法,以父类对象为形参
public static void useArea(Fig f)
{
System.out.println("f.area()="+f.area());
}
public static void main(String []args) {
Rect r=new Rect(8,6);
Tria t=new Tria(8,6);
Fig f;//声明Fig类对象,不能创建Fig类对象
f=r;
useArea(f);//将Fig类引用指向Tria类对象
f=t;
useArea(f);
}
}