java中的抽象类
java中的抽象类
1.什么是抽象类?
类—通过class关键字创建的java元素。描述具有公共性质的一组事物的自定义复合数据类型。
/**
* 普通的java类
* @author Administrator
*/
public class Person {
}
抽象类—通过使用abstract 修饰的普通的java类就是抽象类。
package com.click369.test.demo1;
/**
* 抽象类
* @author Administrator
*/
public abstract class TestClass {
}
2.为什么要有抽象类?
通常情况下我们在编写一个程序的时候需要使用很多的java类,可能这些众多的java类中都具有一些相似的属性或者动作,我们在编写这些众多的java类的时候,把这些个相似的属性或者动作在每一个类中都要编写一次,无形中就造成类中大量代码的重复使用。这个时候我们可能不想把这个相似的属性或者动作在很多的java类中重复出现,那么我们就会创造一个抽象类,把这些相似的属性或者动作编写到这个抽象类中,然后让需要的java类去继承一下这抽象类,那么java类中就有了相似的属性或者动作的java代码。此时我们实际上是将这些相似的属性或者动作书写类一次,减少了大量代码的重复使用。继承抽象类的java类他们可以根据自己的需要来修改一个这个相似的属性或者动作的具体实现过程就OK.
3.抽象类的作用?
减少代码的重复使用。
本质—定义了一组可以由子类共享的一般形式,子类可以根据自己的实际情况去实现这个共享的一般形式。
4.抽象类中的元素
抽象类———类———-变量/方法
1.定义在抽象类中的变量和方法的访问修饰符一般都是public / protected ,因为抽象类中的元素往往是需要被子类继承的,如果我们定义成private/缺省的 那么将来是无法被继承的,就是会失去意义。
2.抽象类中定义实例变量,类变量,构造方法,实例方法,类方法,抽象方法
抽象方法—1.通过abstract 关键字修饰
2.没有方法体【{}】—- 没有具体实现的细节—-让子类去根据自己的实际情况给出实现细节
3.抽象类中可以有抽象方法【多个/重载】,也可以一个抽象方法都没有。
4.拥有抽象方法的类一定是抽象类。
例如:
package com.click369.test.demo1;
/**
* 抽象类
* @author Administrator
*/
public abstract class TestClass {
//实例变量
public int testid=1001;
protected String testname=”zhangsan”;
//类变量
public static int test_static_id=1002;
protected static String test_static_name=”lisi”;
public TestClass(){
System.out.println(“抽象类的构造方法”);
}
public void testMethod(){
System.out.println(“抽象类的实例方法”);
}
public static void test_StaticMethod(){
System.out.println(“抽象类的类方法”);
}
//抽象方法
public abstract void test_abstract_method();
//抽象方法
public abstract void test_abstract_method(int num);
}
5.抽象类是不能通过new创建出java对象的。我们通常都是利用上转型对象来充当抽象类的对象。
上转型对象—-子类的对象赋值给父类的变量。【构造出抽象类的子类】
例如:
package com.click369.test.demo1;
/**
* 普通的java类
* @author Administrator
*/
public class Person extends TestClass {
public void test_abstract_method() {
System.out.println(“被子类重写的抽象方法”);
}
public void test_abstract_method(int num) {
System.out.println(“被子类重写的有参数的抽象方法”);
}
}
package com.click369.test.demo1;
public class TestMain {
public static void main(String[] args) {
//TestClass tc=new TestClass(); //抽象类不能new
//通过上转型对象构造出抽象类的对象【抽象类的构造方法会执行】
TestClass tc=new Person();
//通过得到的抽象类的对象【上转型对象】访问抽象类中的实例变量
System.out.println(“testid==”+tc.testid);
System.out.println(“testname==”+tc.testname);
//通过得到的抽象类的对象【上转型对象】访问抽象类中的实例方法
tc.testMethod();
//通过得到的抽象类的对象【上转型对象】访问由子类重写以后的抽象方法
tc.test_abstract_method();
tc.test_abstract_method(100);
//通过抽象类的类名访问抽象类中的类变量
System.out.println(“test_static_id==”+TestClass.test_static_id);
System.out.println(“test_static_name==”+TestClass.test_static_name);
//通过抽象类的类名访问抽象类中的类方法
TestClass.test_StaticMethod();
}
}
6.当一个普通的java类继承了一个抽象类,此时这个普通的java类有错误:
1.将这个普通的java类改成抽象类
public abstract class Person extends TestClass {
2.在这个普通的java类中重写抽象类中的抽象方法【1.去掉abstract 2.添加方法体】
package com.click369.test.demo1;
/**
* 普通的java类
* @author Administrator
*/
public class Person extends TestClass {
public void test_abstract_method() {
}
public void test_abstract_method(int num) {
}
}
7.当一个方法的参数是抽象类类型的时候:
1.可以传递继承该抽象类的子类对象作为参数
2.传递上转型对象作为参数
8.抽象类可以继承抽象类,普通的类可以继承抽象类,抽象类可以继承普通的Java类.
还没有评论,来说两句吧...