面向对象(抽象类、引用数据类型转换、Object数组)

例一:女孩抽象父类

//abstract关键字修饰类的时候,表示这个类是抽象类
//抽象类不能产生对象,它只能充当父类!
//1、有抽象方法的类一定是抽象类;
//2、抽象类不一定有抽象方法
//3、抽象类除了类有abstract修饰符,它内部跟普通类一样,可以有:
// 属性、构造、已经实现的方法。
public abstract class Girl {
//abstract关键字表示抽象
//当它修饰方法的时候,表示类有这个方法,但是不能确定这个方法的实现,应该由它的子类去确定
public abstract void response();
}

子类继承父类
//子类在继承抽象类的时候,必须重写抽象类的抽象方法。
//否则这个子类也必须是抽象类。
public class Queen extends Girl{
@Override
public void response() {
// TODO Auto-generated method stub
}
}

子类继承
public class PureGirl extends Girl {
@Override
public void response() {
// TODO Auto-generated method stub
System.out.println(“嗯~你好坏~”);
}
}

男孩类有一个女孩类型的女朋友属性

public class Boy {
private Girl myGirl;
public Girl getMyGirl() {
return myGirl;
}
public void setMyGirl(Girl myGirl) {
this.myGirl = myGirl;
}
public void kiss(){
System.out.println(“让我亲一个嘛~~~”);
this.myGirl.response();
}
}

测试选择

import java.util.Scanner;
public class TestLove {
public static void main(String[] args) {
// TODO Auto-generated method stub
Boy boy = new Boy();
System.out.println(“请选择你喜欢的女孩类型:1、纯情;2、野蛮。”);
int choice = new Scanner(System.in).nextInt();
Girl girl = null;//产生一个Girl类型的变量名指向null
switch(choice){//根据选择产生不同的女孩对象
case 1:
girl = new PureGirl();break;//父类的引用指向子类的对象
case 2:
girl = new BoldGirl();break;
}
boy.setMyGirl(girl);
boy.kiss();
}
}

引用数据类型只有继承关系才能转换
父类
public class PetBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

子类

public class DogBean extends PetBean {
private int boneNum;
public int getBoneNum() {
return boneNum;
}
public void setBoneNum(int boneNum) {
this.boneNum = boneNum;
}
}

测试
public class TestMain {
public static void main(String[] args) {
//1、基本数据类型的转型
//1-1、自动类型转换、隐式转换、从小范围的数据类型往大范围的数据类型转换
// 无风险\肯定成功
int a = ‘b’;
double f = 254;
//1-2、强制类型转换、显式转换、从大范围的数据往小范围的数据类型转换
// 有风险\丢失精度\无意义
a = (int)3.14;
char c = (char)12345670;
//2、引用数据类型的转换—只有有继承关系的类才能使用类型转换
//2-1、向上类型转换、自动类型转换、隐式类型转换、从小范围的数据类型往大范围的数据类型转换
// 无风险\肯定成功
PetBean p = new PetBean();//父类的引用可以指向子类的对象
//2-2、向下类型转换、强制类型转换、显式转换、从大范围的数据往小范围的数据类型转换
// 有风险/可能会抛出异常,终止程序的运行
//只有运行起来后,确实是本类引用指向本类对象或父类引用指向子类对象才可以成功
DogBean dog = (DogBean)p;
}
}

Object 数组(可变长度和装不同类型)

public class SuperArray {
//属性
public Object[] array;

private int index;//代表两层含义:1、下一个元素所在的下标;2、已经放了多少个元素。

public SuperArray(){
    this.array = new Object[20];
}
//行为
//放入元素
public void add(Object num){
    if(this.index >= this.array.length){
        //扩容
        Object[] newArray = new Object[this.array.length + 10];
        System.arraycopy(this.array, 0, newArray, 0, this.array.length);
        this.array = newArray;
    }
    //把传入的num放入到array当中去
    this.array[index] = num;
    this.index++;
}
//得到某个元素
public Object get(int index){
    if(index < this.index && index >= 0){
        return this.array[index];
    }
    throw new ArrayIndexOutOfBoundsException(index);//产生一个异常对象并且抛出
}
//修改某个元素
public void set(int index,Object newNum){
    if(index < this.index && index >= 0){
        this.array[index] = newNum;
    }
    throw new ArrayIndexOutOfBoundsException(index);
}
//删除某个位置的元素
public void remove(int index){
    if(index < this.index && index >= 0){
        System.arraycopy(this.array, index + 1, this.array, index , this.array.length - index - 1);
        this.index -- ;
        if(this.array.length - this.index >= 10 && this.array.length > 20){
            Object[] newArray = new Object[this.array.length - 10];
            System.arraycopy(this.array, 0, newArray, 0, newArray.length);
            this.array = newArray;
        }
    }
    throw new ArrayIndexOutOfBoundsException(index);
}
//获得元素的个数
public int size(){
    return this.index;
}
public int getCapibility(){
    return this.array.length;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值