【java】父类与子类

父类与子类,继承的好处就在这,虽然耦合高了点,但子类在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);
		 
 } 
}
发布了27 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38304672/article/details/90082886