第一题
知识点:抽象类
语法点:继承,抽象类
按步骤编写代码,效果如图所示:
编写步骤:
1.
定义抽象类
A
,抽象类
B
继承
A
,普通类
C
继承
B
2. A
类中,定义成员变量
numa
,赋值为
10
,抽象
showA
方法。
3. B
类中,定义成员变量
numb
,赋值为
20
,抽象
showB
方法。
4. C
类中,定义成员变量
numc
,赋值为
30
,重写
showA
方法,打印
numa
,重写
showB
方法,打印
numb
,定义
showC
方法,打印
numc
。
5.
测试类
Test09
中,创建
C
对象,调用
showA
方法,
showB
方法,
showC
方法。
public class Test1 {
public static void main(String[] args) {
A a=new C();
B b=new C();
C c=new C();
c.showA();
c.showB();
c.showC();
}
}
abstract class A{
int numa=10; //默认
abstract void showA();
}
abstract class B extends A{
protected int numb=20;
abstract void showB();
}
class C extends B{
private int numc=30;
@Override
void showB() {
System.out.println(this.numb);
}
@Override
public void showA() {
System.out.println(this.numa);
}
public void showC() {
System.out.println(this.numc);
}
}
第二题
知识点:抽象类
案例:
1
、声明抽象父类
Person
,包含抽象方法
public abstract void pee();
2
、声明子类
Woman
,重写抽象方法,打印坐着尿
3
、声明子类
Man
,重写抽象方法,打印站着上尿
4
、声明测试类
Test10
,创建
Person
数组,存放
Woman
和
Man
对象,并遍历数组,调用
pee()
方法
import java.util.Random;
public class Test2 {
public static void main(String[] args) {
Random r = new Random();
Person[] ps = new Person[10];
for (int i = 0; i < ps.length; i++) {
boolean res = r.nextBoolean();
if (res) {
ps[i]=new Man();
} else {
ps[i]=new Woman();
}
}
for(Person p:ps) {
p.pee();
}
}
}
abstract class Person {
abstract void pee();
}
class Woman extends Person {
@Override
public void pee() {
System.out.println("坐着尿");
}
}
class Man extends Person {
@Override
void pee() {
System.out.println("站着尿");
}
}
第三题
知识点:抽象类
案例:
1
、声明抽象父类
Person
,包含抽象方法
public abstract void eat();
2
、声明子类中国人
Chinese
,重写抽象方法,打印用筷子吃饭
3
、声明子类美国人
American
,重写抽象方法,打印用刀叉吃饭
4
、声明子类印度人
Indian
,重写抽象方法,打印用手抓饭
5
、声明测试类
Test11
,创建
Person
数组,存储各国人对象,并遍历数组,调用
eat()
方法
import java.util.Random;
public class Test3 {
public static void main(String[] args) {
Person3[] ps = new Person3[15];
Random r = new Random();
for (int i = 0; i < ps.length; i++) {
Person3 tmp = null;
switch (r.nextInt(3)) {
case 1:
tmp = new Chinese();
break;
case 2:
tmp = new American();
break;
default:
tmp = new Indian();
}
ps[i] = tmp;
}
for(Person3 p:ps)
p.eat();
}
}
abstract class Person3 {
public abstract void eat();
}
class Chinese extends Person3 {
public void eat() {
System.out.println("用筷子吃饭");
}
}
class American extends Person3 {
public void eat() {
System.out.println("用刀叉吃饭");
}
}
class Indian extends Person3 {
public void eat() {
System.out.println("用手抓饭");
}
}
第四题
知识点:
Object
类的方法
案例:
1
、声明三角形类,包含
a,b,c
三边
(
1
)属性私有化,提供无参,有参构造,提供
get/set
(
2
)重写:
toString()
(
3
)重写:
hashCode
和
equals
方法
(
4
)编写
public double getArea()
:求面积方法
(
5
)编写
public double getPiremeter()
:求周长方法
2
、声明测试类
Test12
,在测试类中创建两个三角形对象,调用以上方法进行测试
import java.util.Objects;
public class Test4 {
public static void main(String[] args) {
Triangle t = new Triangle(3, 4, 5);
System.out.println(t.getArea());
}
}
class Triangle {
private int a, b, c;
public Triangle() {
this.a = 3;
this.b = 4;
this.c = 5;
// this(3,4,5)
}
public Triangle(int a, int b, int c) {
this();
if (a + b > c && a + c > b && b + c > a) {
this.a = a;
this.b = b;
this.c = c;
}
}
double p = (a + b + c) / 2.;
// 求面积方法
public double getArea() {
System.out.println(p);
System.out.println(a+"\t"+b+"\t"+c);
// 海伦公式
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
//==============================
public int getA() {
return a;
}
@Override
public int hashCode() {
return Objects.hash(a, b, c);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
// student对象 instanceof Person
if (getClass() != obj.getClass())
return false;
Triangle other = (Triangle) obj;
return a == other.a && b == other.b && c == other.c;
}
@Override
public String toString() {
return "Triangle [a=" + a + ", b=" + b + ", c=" + c + "]";
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
}