java 创建一个抽象类_Java-抽象类

抽象类

含有抽象方法的类就是抽象类

1) 抽象方法:该方法有返回值,有参数,就是没有方法体,该方法没有方法实现

2) 抽象方法的格式:

abstract 返回值类型 方法名(参数列表);

3) 抽象类需要靠子类来重写抽象方法,以实现其功能

public classTest1 {//抽象类:含有抽象方法的类//抽象方法:没有方法体的方法

public static voidmain(String[] args) {

Taxi taxi=newTaxi();

taxi.name="出租车";

taxi.start();

taxi.run();

taxi.stop();

}

}//定义一个抽象类Car:属性:名字,价格,速度//方法:启动,运行,刹车,全是抽象方法

abstract classCar{

String name;doubleprice;intspeed;public abstract voidstart();public abstract voidrun();public abstract voidstop();

}class Taxi extendsCar{//抽象类是依靠子类,来实现其功能(子类重写抽象方法)

public voidstart() {

System.out.println(name+"行驶");

}public voidrun() {

System.out.println(name+"启动");

}public voidstop() {

System.out.println(name+"刹车");

}

}

4) 抽象类不能直接实例化(创建对象)

public classTest1 {public static voidmain(String[] args) {//Foo1 foo1=new Foo1();---报错

}

}abstract classFoo1{abstract voidshow();

}

5) 可以使用抽象类声明一个对象,然后利用该抽象类的子类来创建对象

格式:抽象类 对象名-->定义对象

对象名=new 子类构造方法-->创建对象

抽象名 对象名=new 子类构造方法

public classTest1 {public static voidmain(String[] args) {

Koo1 koo1=new Koo2(); //抽象类名(父类) 对象名=new 子类的构造方法

koo1.show();

}

}abstract class Koo1{//父类---声明(定义)对象

public abstract voidshow();

}class Koo2 extends Koo1{//子类---创建对象

public voidshow() {

System.out.println("昨天下雨了");

}

}

6) 父类声明指向子类引用

格式:父类 对象=new 子类的构造方法

编译时(javac)           运行时(java)

用这种方式创建的对象,可以访问父类的除重写以外所有的方法,可以访问子类重写父类的方法

唯一不能做的事,就是访问子类独有的方法

public classTest1 {public static voidmain(String[] args) {

Eoo eoo=newEoo2();

eoo.show();//访问子类中重写父类的方法

eoo.print();//父类中的普通方法//eoo.speak();---报错//不能访问子类独有的方法

}

}classEoo{voidshow(){

System.out.println("今天是个好天气");

}voidprint(){

System.out.println("今天是周一");

}

}class Eoo2 extendsEoo{voidshow(){

System.out.println("天气好好");//重写

}void speak(){//子类独有的方法

System.out.println("说话");

}

}

7) 抽象类跟一般类是一样的,只是抽象类含有抽象方法(没有方法体的方法)

抽象类需要靠子类来重写所有的抽象方法,以实现其功能

创建对象:

1.直接使用子类来声明和创建对象

2.父类声明指向子类的对象

public classTest1 {public static voidmain(String[] args) {

Person person=new Worker("张",23,"男",5000);

person.print();

person.show();

}

}//设计Person类型,属性:姓名,年龄,性别//构造方法:1.空参的构造方法//2.带(姓名,年龄,性别)的构造方法//方法:show():显示姓名,年龄属性//抽象方法print();//设计Worker类型,属性:姓名,性别,年龄,工资//构造方法:给所有的属性赋值//方法:重写print()方法,显示该对象所有的属性//

abstract classPerson{

String name;intage;

String sex;

Person(){}

Person(String name,intage,String sex){this.name=name;this.age=age;this.sex=sex;

}voidshow(){

System.out.println(name+","+age);

}public abstract voidprint();

}class Worker extendsPerson{doublesalary;

Worker(String name,int age,String sex,doublesalary){super(name,age,sex);this.salary=salary;

}public voidprint() {

System.out.println(name+","+age+","+sex+","+salary);

}

}

设计模式---工厂模式(了解)

用一个类来帮我们创建和管理对象,就是工厂模式

public classTest1 {//工厂类中用来提供对象的方法,最好设计静态方法,易于调用

public static voidmain(String[] args) {

Emp emp=EmpFactory.getInstance();

emp.show();;

}

}classEmpFactory{public staticEmp getInstance(){

Emp emp=new Emp("刘",45);returnemp;

}

}classEmp{

String name;intage;

Emp(String name,intage){this.name=name;this.age=age;

}voidshow(){

System.out.println(name+","+age);

}

}

public classTest1 {public static voidmain(String[] args) {

Car car=CarFactory.getInstance(1);

car.name="Bmw";

car.show();

Car car1=CarFactory.getInstance(2);

car1.name="Benz";

car1.show();

}

}//设计一个父类Car,属性:名字//构造方法:空参构造方法,带名字的构造方法//方法:show显示该Car的名字//设计一个Car的子类Bmw,属性:速度//设计一个Car的子类Benz,属性:价格//设计一个Car的子类QQ,属性:颜色//设计一个工厂,可以根据用户的请求来创建不同的子类对象

classCar{

String name;

Car(){}

Car(String name){this.name=name;

}voidshow(){

System.out.println(name);

}

}class Bmw extendsCar{intspeed;

}class Benz extendsCar{doubleprice;

}class QQ extendsCar{

String color;

}//分析:参数来代表用户不同的请求//1---BMZ,2---Benz,3----QQ//工厂中获得对象的方法,可以根据调用参数的不同,返回不同的Car的子类对象

classCarFactory{public static Car getInstance(inttype){

Car car=null;if(type==1){

car=newBmw();

}else if(type==2){

car=newBenz();

}else if(type==3){

car=newQQ();

}returncar;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值