理解抽象类与接口的使用;
了解包的作用,掌握包的设计方法。
掌握使用抽象类的方法。
掌握使用系统接口的技术和创建自定义接口的方法。
了解 Java 系统包的结构。
掌握创建自定义包的方法。
(一)抽象类的使用
设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2
2.编程技巧
(1) 抽象类定义的方法在具体类要实现;
(2) 使用抽象类的引用变量可引用子类的对象;
(3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。
(二)使用接口技术
1定义接口Shape,其中包括一个方法size(),设计“直线”、“圆”、类实现Shape接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。
编程技巧
(1) 接口中定义的方法在实现接口的具体类中要重写实现;
(2) 利用接口类型的变量可引用实现该接口的类创建的对象。
package di;
abstract class Shape {
//定义a,b,c属性
private double a;
private double b;
private double c;
//取得或修改a,b,c的属性内容
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public double getC() {
return c;
}
public void setC(double c) {
this.c = c;
}
//生成一个无参构造
public Shape() {
}
//生成三种不同的构造方法
public Shape(double a) {
this.a=a;
}
public Shape(double a,double b) {
this.a =a;
this.b=b;
}
public Shape(double a,double b,double c) {
this.a =a;
this.b=b;
this.c=c;
}
//生成一个抽象方法,area()由子类决定
public abstract void area();
}
package di;
public class Traingle extends Shape {
//调用父类构造方法
public Traingle(double a,double b, double c) {
super(a,b,c);
}
//覆写父类抽象方法
public void area() {
double p=(this.getA()+this.getB()+this.getC()/2);
double s=Math.sqrt(p*(p-this.getA())*(p-this.getB())*(p-this.getC()));
System.out.println("三角形面积为:"+s);
}
}
package di;
public class Circle extends Shape {
public Circle(double a) {
super(a);
}
public void area() {
double s=Math.pow(this.getA(), 2)*Math.PI;
System.out.println("圆的面积为:"+s);
}
}
package di;
public class Rectangle extends Shape {
public Rectangle(double a,double b) {
super(a,b);
}
public void area() {
double s=this.getA()*this.getB();
System.out.println("矩形的面积为:"+s);
}
}
package di;
public class Test {
public static void main(String args[]) {
Shape shape1=new Traingle(1,2,3);
shape1.area();
Shape shape2=new Circle(1);
shape2.area();
Shape shape3=new Rectangle(1,2);
shape3.area();
}
}
package di1;
public interface Shape {
//不同图形的尺寸
public void size();
}
//定义子类Line
class Line implements Shape{
//覆写父类size()方法
public void size() {
System.out.println("直线周长为:"+10);
}
}
package di1;
class Circle implements Shape{
// 定义半径a属性
private double a;
//获取修改a属性内容
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
//带一个参数的构造方法
public Circle (double a) {
this.a=a;
}
//计算面积的方法
public double getArea() {
return Math.pow(a, 2)*Math.PI;
}
//覆写父类size()方法
public void size(){
System.out.println("圆的面积为:"+this.getArea());
}
}
package di1;
public class Test {
public static void main(String[] args) {
Shape shape=new Line();
shape.size();
Shape shape1=new Circle(1);
shape1.size();
}
}
第一题为抽象类,在父类Shape中定义子类需要用到的共同属性a,b,c,并生成三种不同的构造方法供子类调用,再生成一个由子类决定的抽象方法area()。子类将继承父类的属性,通过调用不同的构造方法及覆写父类抽象方法area()。第二题为接口,在父类中生成一个接口的方法size(),再定义不同的子类。子类通过覆写size()方法再输出。
①为抽象类与接口实例化:A a=new B()。
②一个类不要去继承已实现好的类,要抽象类与接口二选一。若两者都可以使用,为避免单继承局限,要优先使用接口。
③接口不可使用构造、普通、抽象方法及变量。
④抽象类可实现多个接口,接口不能继承抽象类。
⑤两者都通过对象的多态性产生实例化对象。
上课的时候感觉自己懂了一点点,回来做题的时候,又出现了种种问题。原来上课听老师讲的只听进去了表面,想要真的懂,还是需要课后的多多练习。老师给出的题目都是典型的,我还是算法太弱了,没有一个大体思维。
原文:https://www.cnblogs.com/qzy7/p/11655696.html