今天继续学习了类的继承,还有静态的相关知识,最后讲了final关键字和单例设计模式.
存疑:静态代码块中的代码是在内存的哪块运行?
子类是否继承了父类的私有字段?
练习的代码如下:
package day08;
/**
* 按要求编写一个Java应用程序:
*
* (1)编写一个矩形类Rect,包含:
*
* 矩形的宽width;矩形的高height。
*
* 两个构造方法:
*
* 1.一个带有两个参数的构造方法,用于将width和height属性初化;
*
* 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。
*
* 两个方法:
*
* 求矩形面积的方法area()
*
* 求矩形周长的方法perimeter()
*
*
*
* (2)通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用
*
* 矩形的左上角坐标来标识,包含:
*
* 添加两个属性:矩形左上角坐标startX和startY。
*
* 两个构造方法:
*
* 带4个参数的构造方法,用于对startX、startY、width和height属性初始化;
*
* 不带参数的构造方法,将矩形初始化为左上角坐标、长和宽都为0的矩形;
*
* 添加一个方法:
*
* 判断某个点是否在矩形内部的方法isInside(double x,double y)。如在矩形内,返回true, 否则,返回false。
*
* 提示:点在矩形类是指满足条件:
*
* x>=startX&&x<=(startX+width)&&y<=startY&&y>=(startY-height)
*
*
*
* (3)编写PlainRect类的测试程序
*
* 创建一个左上角坐标为(10,10),长为20,宽为10的矩形对象;
*
* 计算并打印输出矩形的面积和周长;
*
* 判断点(25.5,13)
* `
* 是否在矩形内,并打印输出相关信息。
*/
public class Demo2 {
public static void main(String[] args) {
PlainRect plainRect = new PlainRect(10, 20, 10, 10);
plainRect.area();
plainRect.perimeter();
boolean inside = plainRect.isInside(25.5, 13);
if (inside) System.out.println("点在矩形里");
else System.out.println("点不在矩形里");
}
}
class Rect {
private double width;
private double height;
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public Rect(double width, double height) {
this.width = width;
this.height = height;
}
public Rect() {
width = 10;
height = 10;
}
public void area() {
System.out.println(this.getHeight() * this.getWidth());
}
public void perimeter() {
System.out.println(2*(this.getHeight() + this.getWidth()));
}
}
class PlainRect extends Rect {
private int startX;
private int startY;
public PlainRect(double width, double height, int startX, int startY) {
super(width, height);
this.startX = startX;
this.startY = startY;
}
public PlainRect() {
this.startX = 0;
this.startY = 0;
super.setHeight(0);
super.setWidth(0);
}
public boolean isInside(double x, double y) {
if (x >= startX && x <= (startX + super.getWidth()) && y <= startY && y >= (startY - super.getHeight())){
return true;
}else
return false;
}
}
class SingleEx{
/**
* 饿汉式
* */
// private final static SingleEx sx = new SingleEx();
//
// private SingleEx(){
//
// }
// public static SingleEx getSx(){
// return sx;
// }
/**
* 懒汉式
* */
private static SingleEx sx;
private SingleEx(){
}
public static SingleEx getSx(){
if (sx == null) {
sx=new SingleEx();
}
return sx;
}
}