public abstract class s {
    public abstract void gets();
}
class Sanjiao extends s{
    double l,h;
    Sanjiao(double l,double h){
        this.l=l;
        this.h=h;
    }
    public void gets(){
        System.out.println(0.5*l*h);
    }
    public static void main(String[] args) {
        Sanjiao p=new Sanjiao(2.1,3.5);
        gets();//就是这一行有问题
    }         

解决方案 »

  1.   

    Sanjiao p=new Sanjiao(2.1,3.5);
    Sanjiao q=new Sanjiao(210,350);
    p.gets();
    q.gets();
    这样就好理解点了吧
      

  2.   

    main方法为静态属性,所以不能调用非静态方法;
    普通方法需要使用“对象.方法名”的方式调用,
    so,用p.gets()。还有个问题,楼主的那个抽象类怎么是public修饰的,
    然后下面的Sanjiao类却不是,这样编译的话还是应该会报错,
    可能是什么找不到main方法之类的,
    所以稳妥的改法就是把Sanjiao声明为public属性,去掉
    s的,同时将文件名更改为Sanjiao.java。
      

  3.   

    完整代码是这样的
    public abstract class s {
        public abstract void gets();
    }
    class Sanjiao extends s{
        double l,h;
        Sanjiao(double l,double h){
            this.l=l;
            this.h=h;
        }
        public void gets(){
            System.out.println(0.5*l*h);
        }
        public static void main(String[] args) {
            Sanjiao p=new Sanjiao(2.1,3.5);
            p.gets();
        }
    }
    class Zhengfangxing extends s{
        double h;
        Zhengfangxing(double h){
            this.h=h;
        }
        public void gets(){
            System.out.println(h*h);
        }
        public static void main(String[] args) {
            Zhengfangxing p1=new Zhengfangxing(5.6);
            p1.gets();
        }
    }
    class Yuan extends s{
        double r;
        Yuan(double r){
            this.r=r;
        }
        public void gets(){
            System.out.println(3.14*r*r);
        }
        public static void main(String[] args) {
            Yuan p2=new Yuan(5.1);
            p2.gets();
        }
    }