抽象类,接口,枚举

  • 一,继承
  • 1,继承
  • 一个父类可以有多个子类,而一个类只能有一个直接父类。子类可以访问父类的成员变量和成员方法,同hi也可以修改或重写父类的方法。通过继承可以实现代码复用。
  • 2,举例应用
  • 创建一个父类person,再创建一个子类Student继承父类person(使用toString和equals方法实现某些功能)
  • 二,抽象类
  • 1,抽象类即提供一个模板,根据他的格式去创建和修改新的类。
  • 2,抽象类的举例应用
  • 定义一个形状抽象类,根据他创建一个圆形子类和长方形子类,将其中的抽象方法(求面积 求体积 两个子类所共有的)在子类中实现,以供子类使用。
  • 三,接口
  • 1,接口可以实现多继承
  • 2,接口的举例应用
  • 定义一个形状类接口,以圆形类和长方形类来实现接口,并将接口中的抽象方法实现以供使用
  • 四,枚举
  • 1,举例应用
  • 定义一个表示一周七天的枚举,并在主方法中遍历枚举所有成员
  • 2,利用foreach语句遍历输出各元素


一,继承

1,继承

一个父类可以有多个子类,而一个类只能有一个直接父类。子类可以访问父类的成员变量和成员方法,同hi也可以修改或重写父类的方法。通过继承可以实现代码复用。

2,举例应用

创建一个父类person,再创建一个子类Student继承父类person(使用toString和equals方法实现某些功能)

//创建一个父类
class Person{
	
	//声明变量
	private String name;
	private char sex;
	private int age;
	
	//构造有参数的方法
	public Person(String name,char sex,int age) {
		this.name=name;
		this.sex=sex;
		this.age=age;
	}
	
	//构造无参数的方法
	public Person() {
		
	}
	
	//重写toString方法返回字符串
	public String toString() {
		return name+","+sex+","+age;
	}
	
	//使用equals方法判断两个学生是否相等
	public boolean equals(Student student) {
		 if(this.name==student.getName() && sex==sex && age==age) {
			    return true;
		 }
	     else {
		       return false;
	     }
	}
	
	//用get方法获取变量
	public String getName() {
    	return name;
    }
	public String getSex() {
    	return name;
    }
	public String getAge() {
    	return name;
   }
}
//创建一个Student子类继承父类Person
class Student extends Person{
	
	//声明变量
	private long number;
	private int phi,eng,comp;
	
	//构造有参数的方法
	public Student(String name,char sex,int age,long number,int phi,int eng,int comp) {
		super(name, sex, age);
		this.number=number;
		this.phi=phi;
		this.eng=eng;
		this.comp=comp;
	}
	
	//构造无参方法
    public Student() {
		
	}
    
    //写成员方法求得平均分
    public double aver() {
		return (phi+eng+comp)/3;
	}
    //写成员方法求最大分
	public int max() {
		return phi>eng?(phi>comp?phi:comp):(eng>comp?eng:comp);
	}
	//写成员方法求最低分
	public int min() {
		return phi<eng?(phi<comp?phi:comp):(eng<comp?eng:comp);
	}
	
	//重写toString方法返回所需字符串 
	public String toString() {
		
		return "学号:"+number+" "+"姓名:"+getName()+" "+"性别:"+getSex()+" "+"年龄:"+getAge()+" "+"平均分:"+aver()+" "+"最高分:"+max()+" "+"最低分:"+min();
	}
	
	//用equals方法判断两个学生是否相等
	public boolean equals(Student student) {
		if(getName() == student.getName() && getSex()==student.getSex() && getAge() == student.getAge() && number==number) {
			return true;
		}
		else {
			return false;
		}
	}
}
//主类
public class SSS {
	//主方法 程序入口
      public static void main(String[] args) {
    	//声明父类变量指向子类对象
		Person s1=new Student();
		Person s2=new Student();
		//判断两个学生是否相等
		System.out.println(s1.equals(s2));
	}
}

二,抽象类

1,抽象类即提供一个模板,根据他的格式去创建和修改新的类。

2,抽象类的举例应用

定义一个形状抽象类,根据他创建一个圆形子类和长方形子类,将其中的抽象方法(求面积 求体积 两个子类所共有的)在子类中实现,以供子类使用。

//定义一个形状抽象类
abstract class Shape{
	
	//声明变量name
	protected String name;
	
	//构造方法(抽象类中的一般方法)
	public Shape(String name) {
		this.name=name;
		System.out.print("名称:"+name);
	}
	
	//将求面积的方法声明为抽象方法
	abstract public double getArea();
	
	//将求体积的方法声明为抽象方法
	abstract public double getLength();
}
//定义继承自Shape的圆形子类Circle
class Circle extends Shape{
	
	//声明最终变量并赋值
	private final double PI=3.14;
	
	//声明变量radius
	private double radius;
	
	//构造方法并调用父类的一般方法
	public Circle(String name,double radius) {
		super(name);
		this.radius=radius;
	}
	
	//实现抽象类中的getArea()方法
	public double getArea() {
		return PI*radius*radius;
	}
	
	//实现抽象类中的getLength()方法
	public double getLength() {
		return 2*PI*radius;
	}
}
//定义继承自Shape的一个长方形子类Rectangle
class Rectangle extends Shape{
	
	//声明变量
	private double length;
	private double wide;
	
	//构造方法并调用父类中的一般方法
	public Rectangle(String name,double length,double wide) {
		super(name);
		this.length=length;
		this.wide=wide;
	}
	
	//实现抽象类中的getArea()方法
	public double getArea() {
		return length*wide;
	}
	
	//实现抽象类中的getLength()方法
	public double getLength() {
		return 2*(length+wide);
	}
}
public class A {
	//main方法为主方法,程序的入口
     public static void main(String[] args) {
    	 //声明父类对象,指向子类对象
		Shape s1=new Circle("圆",10.2);
	     //利用对象调用方法求面积和周长并输出
		System.out.print("; 面积: "+s1.getArea());
		System.out.println("; 周长: "+s1.getLength());
		//声明父类对象,指向子类对象
		Shape s2=new Rectangle("长方形",6.5,10.3);
		//利用对象调用方法求面积和周长并输出
		System.out.print("; 面积:"+s2.getArea());
		System.out.println("; 周长:"+s2.getLength());
	}
}

三,接口

1,接口可以实现多继承

2,接口的举例应用

定义一个形状类接口,以圆形类和长方形类来实现接口,并将接口中的抽象方法实现以供使用

//定义接口
interface IShape{
	
	//声明静态成员变量
	static final double PI=3.14;
	
	//声明抽象方法
	double getArea();
	double getLength();
}
//以ICirle来实现ISape接口
class ICircle implements IShape{
	
	//声明变量
	private double radius;
	
	//构造方法
	public ICircle(double radius) {
		this.radius=radius;
	}
	
	//实现接口中的getArea()方法
	public double getArea() {
		return PI*radius*radius;
	}
	
	//实现接口中的getLength()方法
	public double getLength() {
		return 2*PI*radius;
	}
}
//以IRectangle 来实现ISape接口
class IRectangle implements IShape{
	
	//声明变量
	private double length;
	private double wide;
	
	//构造方法
	public IRectangle(double length,double wide) {
		this.length=length;
		this.wide=wide;
	}
	
	//实现接口中的getArea()方法
	public double getArea() {
		return length*wide;
	}
	
	//实现接口中的getLength()方法
	public double getLength() {
		return 2*(length+wide);
	}	
}
public class B{
	public static void main(String[] args) {
		
		//声明父接口变量cir,指向子类对象
		IShape cir=new ICircle(5.0);
		
		//利用对象调用方法求面积和周长并输出
		System.out.print("圆面积:"+cir.getArea());
		System.out.println("; 圆周长:"+cir.getLength());
		
		//声明父接口变量rect,指向子类对象
		IShape rect=new IRectangle(6.5,10.8);
		
		//利用对象调用方法求面积和周长并输出
		System.out.print("矩形面积:"+rect.getArea());
		System.out.println("; 矩形周长:"+rect.getLength());
	}
}

四,枚举

1,举例应用

定义一个表示一周七天的枚举,并在主方法中遍历枚举所有成员

//定义一个名为Week的枚举类型
enum Week
    //声明7个枚举成员
{MONDAY,TUESDAY,WEDNESDAY,THUSDAY,FRIDAY,SATURDAY,SUNDAY}
    //定义主类
public class Person{
        //主方法
    public static void main(String[] args) {
        // [两种方法将枚举成员赋值给枚举型变量]
        // 1.定义一个枚举型变量 并赋给其一个枚举值
        Week a=Week.MONDAY ;
        // 2.用枚举名Week调用valueOf方法
        Week b=Week.valueOf("TUESDAY");
        //输出枚举变量的值
        System.out.print(a);
        System.out.println(" "+b);
        //利用foreach语句遍历枚举所有成员
        for(Week i:Week.values() ){
          System.out.println("序号: "+ i.ordinal()+" "+i);
        }
    }
}

2,利用foreach语句遍历输出各元素

结构  for(type element:array) {
	    System.out.println(element);
	    ..
	    ..
     }
举例  int[] arr= {1,2,3,4};
      for(int element :arr){
	    System.out.println(element);
	  }