本帖最后由 王瑞 于 2013-3-22 17:43 编辑
可以去看一下private关键字的使用,他是不能修饰类的。能修饰类的只有三个public final 和default(就是不写,默认的意思)
所以能达到不能创建对象的这个目的,就我现在学的知识面,貌似只能用到抽象类了
下面是我刚刚做的抽象类的学习日志,希望能给你帮助
4.7 抽象类
定义:
抽象就是从多个事物中将共性的,本质的内容抽取出来。
例如:狼和狗的共性都是犬科,犬科就是抽象出来的概念。
抽象类:
java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类
抽象类的由来:
多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。
(函数有两部分:函数声明和函数主体)
抽象类的的特点:
1,抽象方法一定在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象。因为调用抽象方法没意义。(因为抽象方法没有主体)
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
格式:
abstract class Student
{
abstract final void study();
}
用abstract修饰类名,然后再在要被抽象的方法前加abstract,因为只用声明,没有主体,函数的结束语句不是}就是;,没有主体所以在最后加上一个;。
抽象方法一定在抽象类中。
new Student()这样的语句是错误,因为Student类是个抽象类,没有对象无法调用,但是如果这样new Student().study()是可以的,因为study是个方法,匿名函数可以调用一次,虽然里面没有内容,但是是可以执行的。
演示代码:
abstract class Student
{
abstract void study();
abstract void study1();
}
class BaseStudent extends Student
{
void study()
{
System.out.println("base study");
// bstract void study1();//继承Student,所以默认他还有另外一个函数语句abstract void study1();如果想不让子类是抽象的,必须重写父类中的所用方法才行。
}
}
当BaseStudent继承Student的时候,因为子类BaseStudent只重写了一个方法study(),又因为他继承Student,所以默认他还有另外一个函数语句abstract void study1();又因为抽象方法一定在抽象类中,所以这个部分继承抽象父类的子类也必须是抽象的。如果想不让子类是抽象的,必须重写父类中的所用方法才行。
|