zoukankan      html  css  js  c++  java
  • 第七周课程总结&实验报告(五)

    第七周课程总结&实验报告(五)

    实验四 类的继承

    实验目的

    理解抽象类与接口的使用;

    了解包的作用,掌握包的设计方法。

    实验要求

    掌握使用抽象类的方法。

    掌握使用系统接口的技术和创建自定义接口的方法。

    了解 Java 系统包的结构。

    掌握创建自定义包的方法。

    实验内容

    (一)抽象类的使用

    1、设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。

    注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2

    2.编程技巧

    (1) 抽象类定义的方法在具体类要实现;

    (2) 使用抽象类的引用变量可引用子类的对象;

    (3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

    1、实验代码

    ##圆
    package 作业;
    
    public  class Circle1 extends Shape {
    	private double radius = 0;
    	public Circle1 (double radius) {
    		this.radius = radius;
    	}
    	public double getArea() {
    		return Math.PI*Math.pow(radius,2);        
    	}
    	
    }
    
    ##矩形
    package 作业;
    
    public  class Rectangle extends Shape {
    	private double width = 0;
    	private double height = 0;
    	public Rectangle (double width,double height) {
    		this.width = width;
    		this.height = height;
    	}
    	public double getArea() {
    		return width*height;
    	}
    
    }
    
    ##三角形
    package 作业;
    
    public  class Triangle extends Shape {
    	private double a = 0;
    	private double b = 0;
    	private double c = 0;
    	public Triangle (double a,double b,double c) {
    		this.a = a;
    		this.b = b;
    		this.c = c;
    	}
    	public double getArea() {
    		double p = (a + b + c)/2;
    		return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    	}
    }
    
    ##Shape及其测试类
    package 作业;
    
    public abstract class Shape {
    public abstract double getArea();
    	
    	public static void main(String[] args) {
    		Shape s[] = new Shape[3];           创建三个类
    		s[0] = new Circle1(5);
    		s[1] = new Rectangle(4,5);
    		s[2] = new Triangle(4,5,6);
    		for (int i=0;i<=2;i++)                 利用for循环依次输出它们的面积
    		{
    			 System.out.println(s[i].getArea());
    		}
    	}
    
    }
    

    错误的原因:

    The method getArea(Shape) in the type Shape is not applicable for the arguments (),意思是我调用的方法,
    参数是void,即空,也就是不需要参数,而我调用时,给了一个Shape型的参数,所以报错。我只要把
    public abstract double getArea(Shape shape);改为public abstract double getArea();就可以了。

    (二)使用接口技术

    1定义接口Shape,其中包括一个方法size(),设计“直线”、“圆”、类实现Shape接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。

    2、编程技巧

    (1) 接口中定义的方法在实现接口的具体类中要重写实现;

    (2) 利用接口类型的变量可引用实现该接口的类创建的对象。

    2、实验代码

    ##Shape
    package 作业;
    
    public interface Shape2 {
    	public void size();   定义Shape的抽象方法;
    
    
    }
    
    ##直线
    package 作业;
    
    public class Line implements Shape2 {
    	
    	private double length;
    	public Line (double length) {
    		this.length = length;
    	}
    
    	@Override
    	public void size() {
    		System.out.println("直线的长度:"+this.length);
    		
    	}
    	
    
    }
    
    ##圆形
    package 作业;
    
    public class Roundness implements Shape2 {
    	private double radius;
    	public Roundness (double radius) {
    		this.radius = radius;
    	}
    
    	@Override
    	public void size() {
    		
    		System.out.println("圆形的面积:"+Math.PI*Math.pow(radius, 2));
    	}
    
    }
    
    ##测试类
    package 作业;
    
    public class ceshi {
    	public static void main(String[] args) {
    		Shape2 c = new Line(8);
    		Shape2 c2 = new Roundness(9);
    		c.size();
    		c2.size();             调用方法
    	}
    
    }
    

    由于本题难度不高,属于容易题目,所以没有错误截图。

    本周自学小结

    一、Java中有四种访问权限,private、default、public、protected。
    1、private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,
    其子类不能访问,更不能允许跨包访问。
    2、default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问。
    3、protected: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法及子类访问,
    即使子类在不同的包中也可以访问。
    4、public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。
    
    这里需要注意的是,所谓的访问,可以分为两种不同方式:第一,通过对象实例访问;第二,直接访问。 
    比如说,某父类protected权限的成员,子类是可以直接访问的,换一种说话是子类其实继承了父类的除了private成员外的所有成员,包括protected成员,
    所以与其说是子类访问了父类的protected成员,不如说子类访问了自己的从父类继承来的protected成员。另一方面,如果该子类与父类不在同一个包里,
    那么通过父类的对象实例是不能访问父类的protected成员的。
    
    

    本周课堂内容小结

    抽象类的实际应用--模板设计

    这里,抽象类就相当于一个模板。就像现实中的各种模板,只有模板填写之后才会有意义。

    制定标准

    抽象类与接口的关系

    1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
    
    2、抽象类要被子类继承,接口要被类实现。
    
    3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
    
    4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
    
    5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
    
    6、抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
    
    7、抽象类里可以没有抽象方法
    
    8、如果一个类里有抽象方法,那么这个类只能是抽象类
    
    9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
    
    10、接口可继承接口,并可多继承接口,但类只能单根继承。
    

    天行健,君子以自强不息

  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/neir/p/11651149.html
Copyright © 2011-2022 走看看