ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java学习———继承,抽象类,接口,枚举

2021-11-21 12:31:41  阅读:74  来源: 互联网

标签:Java name 子类 枚举 double return 抽象类 方法 public


抽象类,接口,枚举

一,继承

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);
	  }

标签:Java,name,子类,枚举,double,return,抽象类,方法,public
来源: https://blog.csdn.net/qq_63606575/article/details/121449222

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有