小白如何搭建个人网站,广州户外拓展,wordpress个性404,网站合作建设方案你好#xff01; 这篇文章将讲述java中的抽象类和抽象方法的知识点#xff0c;这个是最简单的#xff0c;也是最容易被遗忘的。在Java中#xff0c;如果要表示一个抽象的类或方法时#xff0c;我们需要使用abstract#xff0c;它的中文翻译就是“抽象的”。
抽象类和抽象…你好 这篇文章将讲述java中的抽象类和抽象方法的知识点这个是最简单的也是最容易被遗忘的。在Java中如果要表示一个抽象的类或方法时我们需要使用abstract它的中文翻译就是“抽象的”。
抽象类和抽象方法
一知识梳理
1.基本概念
在面向对象的概念中所有的对象都是通过类来描述的但并不是说所有的类都是用来描述对象的当一个类中没有包含足够的信息以描绘一个具体的对象时这样的类就是抽象类。 例形状就是一个抽象的概念。不同的子类计算形状面积的方法是不一样的。可提供 抽象方法来被不同的子类所实现。
//抽象类Shape
abstract public class Shape{abstract double area();//抽象方法
}从例子中可看出抽象了是用关键字 abstract 修饰的。抽象类中有一种特殊方法 即用abstract 关键字来修饰的方法称为“抽象方法”。
2.抽象类和抽象方法的声明格式 abstract class 类名{成员变量方法 {方法体}//一般方法abstract 方法;//抽象方法
}3.抽象类和抽象方法的特点
1抽象方法不允许直接实例化换句话说抽象类不能创建对象它只能作为其他类的父类。 但可以通过向上转型指向实例化。 2抽象方法只有声明不能有实现也就是仅有方法头而没有方法体和操作实现。 如abstract double area( );
4.定义抽象类的意义在于
1为其子类提供一个公共的类型父类引用指向子类对象 2封装子类中的重复内容成员变量和方法 3将父类设计成抽象类后既可借由父子继承关系限制子类的设计随意性在一定程度上避免了无意义父类的实例化
重点注意
■含有抽象方法的类只能定义成抽象类 如下面不定义为抽象类时会报错 正确的代码为 ■抽象类不一定包含抽象方法。 例子
abstract public class Shape{public void girth(){System.out.println(圆形周长为....);//一般方法}
}■在抽象类中的成员方法可以包括一般方法和抽象方法
abstract public class Shape{public void girth(){System.out.println(圆形周长为....);//一般方法}abstract double area();//抽象方法
}■ 抽象类不能被实例化即使抽象类不包含抽象方法这个抽象类也不能创建实例。抽象类的构造方法主要是用于被其子类调用。 例子 Shape 抽象类中不包含抽象方法
abstract public class Shape{public void girth(){System.out.println(圆形周长为....);//一般方法}
}测试类中实例化Shape编译器会报错
■一个类继承抽象类后必须实现其所有抽象方法否则也是抽象类不同的子类对父类的抽象方法可以有不同的实现。
//抽象类父类Shape
abstract public class shape{abstract double area();//抽象方法
}则其子类 Circle 有两种做法
方案一重写抽象方法 area( ),使方法得以实现
//字类圆Circle类
public class Circle extends shape{//属性圆的半径rpublic double r;public Circle(double r){this.rr}//重写父类中area()方法public double area(){return(double)(3.14*r*r)}
}方案二子类 Circle 类也定义为抽象类
public abstract class Circle extends Shape{//属性圆的半径rpublic double r;public Circle(double r){this.rr;}
}■即使父类是具体的但其子类也可以是抽象的。如 Object 是具体的但可以创建抽象子类。 ■abstract 方法不能用 static 和 private 修饰对于类不能同时用 final 和 abstract 修饰因为 final 关键字使得类不可继承而 abstract 修饰的类如果不可以继承将没有任何意义。两者放在一起会起冲突
如以下用法都会引起编译器报错
一个完整准确的抽象类例子
声明一个抽象类 Shape,有抽象成员方法 area()。Shape 派生出两个子类圆 Circle 类和矩形 Rectangle 类。Shape 里声明了抽象方法 area(),该方法分别在两个子类里得到实现。 代码如下 抽象类父类Shape
//抽象类父类Shape
abstract public class Shape{abstract double area();//抽象方法
}子类圆Circle
//子类圆Circle
public class Circle extends Shape{//属性圆的半径rpublic double r;Circle(){}//创建带参构造函数参数为rpublic Circle (double r){this.rr;}public double getR(){return r;}public void setR(double r){this.rr;}//重写父类中area方法public double area (){return(double)(3.14*r*r);}
}子类矩形类Rectangle
//子类矩形类Rectangle
public class Rectangle extends Shape{//属性矩形的长length、宽widepublic double length;public double wide;Rectangle(){}//创建带参构造函数以length和wide为参数public Rectangle(double length,double wide){this.lengthlength;this.widewide;}public double getLength() {return length;}public void setLength(double length) {this.length length;}public double getWide() {return wide;}public void setWide(double wide) {this.wide wide;}//重写父类的area方法public double area(){return length*wide; }
}测试类
//测试类
public class text {public static void main(String[] args) {// TODO 自动生成的方法存根Circle cnew Circle(3.5);Rectangle renew Rectangle(6,5);//调用area()方法输出结果System.out.print(圆的面积为c.area());System.out.print(矩形的面积为re.area());}}