P436抽象相关
第一题,首先类加载,创建new c1的时候,color等于之前的red,没有进行j静态初始化
第二题
public class Homework { public static void main(String[] args) { System.out.println(F.getNum());//100100 System.out.println(F.getNum()); System.out.println(new F().getsNum()); System.out.println(new F().getsNum()); System.out.println(new F().getsNum());//100500 } } class F{ private static int Num=10000; private static int sNum; public static int getNum() { Num+=100; return Num; } public F() { sNum=getNum(); } public static int getsNum() { return sNum; } }
第三题
public class Homework {
public static void main(String[] args) {
Animal cat1=new Cat();
Animal dog1=new Dog();
cat1.shout();
dog1.shout();
}
}
abstract class Animal{
public abstract void shout();
}
class Cat extends Animal{
@Override
public void shout() {
System.out.println("猫喵叫");
}
}
class Dog extends Animal{
@Override
public void shout() {
System.out.println("狗吠中");
}
}
P437接口作为实参
public class InterClassExercise01 {
public static void main(String[] args) {
f1(new IL() {
@Override
public void show() {
System.out.println("z这个是一副画....");
}
});//首先匿名类是一个对象,其次f1(实参为对象));
}
//静态方法,形参是接口类型
public static void f1(IL il){
il.show();
}
}
interface IL{
void show();
}
package Homework;
public class Work {
public static void main(String[] args) {
//接口不能实例话,其中的方法省略abstract
//普通类实现接口必须要所有方法,而ab类不需要
//匿名内部类还是一个对象//成员内部类不用static修饰//静态内部类
Cellphone cellphone = new Cellphone();
cellphone.testwork(new CP() {//匿名内部类作为实参直接传递
@Override
public double test(double n1) {
return 0;
}
},4);
}
}
interface CP{
public double test(double n1);
}
class Cellphone{
public void testwork(CP cp,double n1){
double res=cp.test(n1);
System.out.println("计算结果n1="+n1);
}
}
//最后输出计算n1=4.0;
//修改1下
public class Work {
public static void main(String[] args) {
Cellphone cellphone = new Cellphone();
cellphone.testwork(new CP() {//匿名内部类作为实参直接传递
@Override
public void test(double n1) {
System.out.println("n1等于多少"+n1);
}
},4);
}
}
interface CP{
public void test(double n1);
}
class Cellphone{
public void testwork(CP cp,double n1){
cp.test(n1);
System.out.println("计算结果n1="+n1);
}
}
//n1等于多少4.0
//计算结果n1=4.0
P438局部内部类变量
public class Homwork02 {
public static void main(String[] args) {
//局部内部类,内访问外直接,外访问创对象
new A().test();
}
}
class A{
private String name="name1";
public void test(){
class B{
private String name="Bname";
public void show(){
System.out.println("B的name="+name);
System.out.println("Outer的name"+A.this.name);
}//重名的方法
}new B().show();
}
}
P439家庭作业4
//比较难
package Homework;
public class Homework06 {
public static void main(String[] args) {
Person1 tang=new Person1("唐",new Horse());
//如何优化,可以先判断是适合H还是B
tang.passRiver();
tang.fire();
tang.common();
}
}
interface Vehic{
public void work();
}
class Horse implements Vehic{
@Override
public void work(){
System.out.println("马儿前进");
}
}
class Boat implements Vehic{
@Override
public void work(){
System.out.println("河面要乘船");
}
}
class Plan implements Vehic{
@Override
public void work(){
System.out.println("坐飞机");
}
}
class VEfactory{
//认为马儿始终是一匹
//饿汉式
private static final Horse horses=new Horse();
public static Horse getHorse(){//将方法做成static非常的方便
return horses;
}
public static Boat getBoat(){
return new Boat();
}
public static Plan getPlan(){
return new Plan();
}
}
class Person1 {
private String name;
private Vehic vehic;
public Person1(String name, Vehic vehic) {
this.name = name;
this.vehic = vehic;
}
//实例化,封装方法
public void passRiver(){
// Boat boat=VEfactory.getBoat();//从工厂中获得马
// boat.work();
if(!(vehic instanceof Boat)){//是空,以及不是船,都去获取
vehic=VEfactory.getBoat();
}
vehic.work();//这里是接口调用
}
public void common(){
if(!(vehic instanceof Horse)){//这里是多肽
vehic=VEfactory.getHorse();
}
vehic.work();//这里是接口调用
}
public void fire(){
if(!(vehic instanceof Plan){
vehic=VEfactory.getPlan();
}
vehic.work();
}
}
P440枚举和switch的结合
package Homework;
public class H7 {
public static void main(String[] args) {
new Car(70).getAir().flow();
}
}
class Car{
private double tem;
class Air{//成员对象
public void flow(){
if(getTem()>40){
System.out.println("冷气");
}else if(getTem()<0){
System.out.println("暖气");
}else{
System.out.println("关空调");
}
}
}
public Car(double tem) {
this.tem = tem;
}
public double getTem() {
return tem;
}
public Air getAir(){
return new Air();
}
}
package Homework;
public class H8 {
public static void main(String[] args) {
Color.RED.show();//输出r255g0b0
Color blue=Color.BLUE;
switch (blue){//括号中放入枚举对象,在case后直接写入枚举对象
case RED:
System.out.println("匹配到红色");
break;
case BLUE:
System.out.println("匹配到蓝色");
break;
default:
System.out.println("没有匹配到");
}
}
}
enum Color implements IN{
RED("255","0","0"),BLUE("0","0","225");
private String redValues;
private String greenValues;
private String blueValues;
Color(String redValues, String greenValues, String blueValues) {
this.redValues = redValues;
this.greenValues = greenValues;
this.blueValues = blueValues;
}
@Override
public void show() {
System.out.println("r"+redValues+"g"+greenValues+"b"+blueValues);
}
}
interface IN{
public void show();
}