package mypackage;//类中只要有一个abstract,则类就必须是abstractpublic abstract class Person{ //当在定义一个类时,其没有属性(这个类中没有定义实例域),实际其没有任何意义 //在这里,没有任何东西可以描述一个人 //当然,可以返回一个空串,表示这个人没有什么可以描述的 //比如上大街上,找个路人问我要找一个人,别人问你有没有什么可以描述一个人的,你说没有,那这个人怎么找 //就是一个空的、虚的、没有意义的人// public String getDescription()// {// return "the person has nothing";// } //但通常,这不是一个好的办法 //既然这是一个没有意义的类,那给其提供一个没有意义的方法,实际也没什么意义,还不如不要 //但不要又不太好描述,所有就有了抽象的概念 public abstract String getDescription(); //将一个方法定义为abstract,可以不提供具体的实现,而有子类来实现 //但定义为一个抽象方法后,该类就必须是一个抽象类,需要把类也定义为abstract //abstract类中,同样还是可以定义具体的实例域和方法的,只不过该类还是不能定义一个对象 //只不过,这样的做法看起来好像有一点点混乱,既然abstract类没有意义,怎么又会有代表这个类的属性 //但好处是,可以将大量重复的、相同的“东西”放到abstract类中进行统一的处理 //这里的“东西”不太好概括,因为很有可能它们和这个类本身没有什么关系,只是找到一个可以统一处理的地方 //所以往后就有了接口的说法 PRivate String m_sName = "Pernson"; public String getName() { return m_sName; }}//定义一个学生,学生也是一个人,同时,它有自己的身份“学生”class Student extends Person{ String m_sIdentify = "student"; public String getDescription() { return m_sIdentify; }}需要注意,abstract类是不能定义对象的,会报错。
但其变量和继承中一样,是可以引用子类对象的。
//abstract类是不允许定义一个对象的,因为它没有实际意义// Person p = new Person();// System.out.println(p.getDescription()); //abstract类不允许定义对象,其子类只要实现了就是可以的 Student st = new Student(); Person p = st;//并且,abstract类变量同样是可以引用子类对象的 System.out.println(st.getDescription()); System.out.println(p.getDescription()); System.out.println(p.getName());
新闻热点
疑难解答