Bigdata Development Java_Study_03(继承中关键字,抽象类)
来源:互联网 发布:excel将数据分成多列 编辑:程序博客网 时间:2024/05/19 07:29
继承中的关键字
/*修饰词,设置属性和方法的使用范围。public 在整个项目中都可以使用。protected 只能在当前包内使用。private 只能在当前类中使用,子类继承不到。只有public才能修饰类,一个.java文件中可以定义多个类,只有一个类使用public修饰并且这个类和.java的文件名必须保持一致。实际开放中不推荐在一个.java中写多个类。final修饰的变量,值不能发生变化,叫做常量。修饰的方法,不能被子类重写。修饰的类,不能被继承。static一个类所有对象,都拥有相同值的属性可以使用static修饰。static静态变量,静态方法。1.这个类所有对象共享这个属性。任意一处修改,都会导致所有对象的这个属性的值发生变化。2.这个属性可以不创建对象,使用类名直接调用,推荐的使用方式。一般static和final配合使用定义常量。常量在开发中非常常用,项目中的一些不会变化的字符串和数字:用户名,提示信息等。都是作为常量定义在单独类中的,使用的时候类名+变量名直接调用。静态方法通过类名调用,没有创建对象。1,不能使用this(当前类对象)和super(父类对象)。2.不能使用当前类的非静态属性和非静态方法(没有用static 修饰的属性和方法)3.可以使用静态属性和静态方法。*/
abstract
/*// public void cry() {// // // 1. 不知都该怎么实现// // 2. 无论写什么都会被子类覆盖// // 那就什么也不写// } // abstract,抽象 // 如果一个方法只有声明,没有实现,可以使用 abstract 关键词修饰 // 声明就是 {} 前的内容:方法的名字,返回值,参数 // 实现就是 {}:方法要完成的功能,写的代码abstract类不能创建对象,防止去调用抽象方法。抽象方法没有方法体,所以不能new出对象。一旦abstract类的子类重写了所有抽象方法,那么他的子类可以创建对象。否则子类也必须声明为抽象类。抽象类中可以有正常的方法,也可以没有抽象方法,为了不让别人创建这个类的对象,让别人去使用他的子类。但是如果有抽象方法,比如设置为抽象类。***编译时类型:决定了写代码的时候能调用的方法和属性。******运行时类型:软件运行过程中真正创建对象的类型。****/public abstract class Shape { /** * 获得当前图形的面积 * @return 图形的面积 */ public abstract double area();}public class Rectangle extends Shape { /** * 宽 */ public double w; /** * 高 */ public double h; @Override public double area() { return w * h; }public class Circle extends Shape { /** * 圆形的半径 */ public double r; @Override public double area() { return Math.PI * r * r; }}public class Cloth { /** * 计算三个图形的面积和 * @param s1 图形1 * @param s2 图形2 * @param s3 图形3 */ public void sumShapeArea(Shape s1, Shape s2, Shape s3) { double area = s1.area() + s2.area() + s3.area(); System.out.println("总面积是:" + area); } // 参数个数不确定:两种解决方案 // 1. 参数设置为 数组,一个数组对象代替多个对象 // 一袋苹果 = 10 个苹果,一个 Shape[] = 多个 Shape 对象 public void sumClothArea(Shape[] shapes) { double area = 0; for (Shape shape : shapes) { // 遍历数组取出每一个图形,面积进行累加 area += shape.area(); } System.out.println("总面积是:" + area); } // 2. 使用可变长参数,调用方法的时候可以传入任意个相同类型的参数 // 本质还是把参数放入到 shapes 数组中,传递到方法内 public void sumClothArea2(Shape ...shapes) { // shapes 是一个数组,存放了任意个 Shape 对象 double area = 0; for (Shape shape : shapes) { // 遍历数组取出每一个图形,面积进行累加 area += shape.area(); } System.out.println("总面积是:" + area); }}public class Demo { public static void main(String[] args) { /* * 衣服,三角形,圆形,长方形 * * 衣服: * 方法: * 计算任意个图形的面积 * (一个类型需要同时表示 三角形,圆形,长方形 三种类型) * (父类和子类的关系,一个父类类型可以表示所有的子类类型) * (为三个图形增加一个父类 Shape,使用 Shape 作为方法的参数类型) * (编译类型为父类类型,决定了参数只能调用父类的方法) * (去 Shape 类中增加 area 方法,计算图形的面积) * (area 方法无法实现,所以定义为 abstract) * (Shape 也需要设置为 abstract) * * 圆形类继承自 Shape * (Shape 是 abstract,需要实现 abstract 方法 area) * (area 计算圆形的面积,需要知道圆的半径 r) * (r 不能是固定的值,只能设置为变量,两种方式,参数和属性) * (area 是重写父类的方法,要保持完全一致,参数方案不能使用) * (增加属性 r,area 方法中使用属性 r 计算面积) * * 长方形参考圆形类继承自 Shape * (重写抽象 area 方法,增加 w 和 h 属性,计算面积) * */ Cloth cloth = new Cloth(); Circle c1 = new Circle(); c1.r = 2; Circle c2 = new Circle(); c2.r = 3; Rectangle r1 = new Rectangle(); r1.w = 3; r1.h = 5; Rectangle r2 = new Rectangle(); r2.w = 2; r2.h = 6; cloth.sumShapeArea(c1, c2, r2); cloth.sumShapeArea(c2, r1, r2); // 使用数组的方式传递参数 Shape[] s1 = {r1, c1}; // 数组的静态初始化,创建数组的时候为数组内容赋值 Shape[] s2 = {r1, c1, r2, c2}; cloth.sumClothArea(s1); cloth.sumClothArea(s2); // 可变长参数方法的调用和传参,多个之间以 , 分隔,没有个数限制 cloth.sumClothArea2(c1, c2, r1); cloth.sumClothArea2(r2); cloth.sumClothArea2(c2, r2); }}
阅读全文
0 0
- Bigdata Development Java_Study_03(继承中关键字,抽象类)
- final关键字,继承-抽象类
- Bigdata Development Java_Study_02 (继承 基本定义以及构造方法)
- 继承、finally关键字、抽象类、接口
- Bigdata Development Java_Guidance_01
- Bigdata Development Java_Guidance_02
- Bigdata Development Java_Study_08(Exception)
- Bigdata Development Web_Study_01(HTML)
- Bigdata Development Database_Study_01
- 7.1面向对象(继承中成员方法关系,final关键字,多态,抽象类,接口)
- 黑马程序员——继承、final关键字、抽象类
- java中单继承、接口、抽象类
- Java中继承、final、抽象类
- 黑马程序员_java的继承性- 继承-final关键字-抽象类-接口-多态-异常-包-多线程-
- Bigdata Development Java_Study_04(interface 堆,栈)
- Bigdata Development Web_Study_02(Servlet使用,table标签)
- Bigdata Development Web_Study_04(Session和Cookie)
- Bigdata Development Java_Study_09(文件,io流)
- 杭电oj1000阶乘
- PhotoView实现放大缩小功能
- 数据结构--树
- hdu6034--Balala Power!
- Android Studio 打包 release 版本后无法安装的问题
- Bigdata Development Java_Study_03(继承中关键字,抽象类)
- 用C语言进行顺序表的实现
- [Poi2010]Monotonicity 2 线段树
- Spring+SpringMVC+MyBatis整合配置文件的搭建
- C++程序无法加断点解决方法
- 高速USB设备枚举的握手过程
- POJ 2104 K-th Number 可持久化线段树
- DDL,DQL,DML,DCL全称
- UVA