黑马程序员技术交流社区
标题:
史上最为详细的个人总结---抽象!看完你就懂了
[打印本页]
作者:
n361204357
时间:
2015-7-18 09:58
标题:
史上最为详细的个人总结---抽象!看完你就懂了
本帖最后由 n361204357 于 2015-7-23 22:57 编辑
/*
抽象:从很多对象中抽取方法声明,从而定义在一个新的类中。没有方法体的方法被称为抽象方法。有抽象方法的类被称为抽象类。
多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
原因:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
作用:强制要求子类必须完成某些功能。
特点:
抽象类的特点:
A:抽象方法和抽象类用关键字abstract表示。
B:有抽象方法的类一定是抽象类(或者接口)。
抽象类中不一定有抽象方法。
C:抽象类不能被实例化。
那么,怎么实例化呢?
通过子类对象进行实例化。
D:如果一个类继承抽象类,那么
这个类要么本身也是抽象类。
这个类重写父类的所有抽象方法。
抽象类的成员特点:
A:成员变量 可以有成员变量,也可以有常量。
B:构造方法 有构造方法的。
既然不能被实例化,那么有构造方法有什么用?
可以用于子类访问父类数据前,对父类数据进行初始化。
C:成员方法
可以有抽象方法,也可以有非抽象方法。
抽象方法是为了要求子类做某些事情。
非抽象方法是为了提高代码复用性,被子类继承。
格式:
抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
Animal a = new Cat();
注意事项:
在继承中,我们为什么有些时候,会选择父类是抽象类?
作用:强制要求子类必须完成某些功能。
多态中必须有方法的重写,其实是针对于抽象类这种情况来说的
如果不重写抽象方法 就没有意义了
抽象类可以实例化 是通过子类来实现 这种东西叫多态 也叫向下转型
*/
abstract class Animal//有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法。
{
private String name;
private int age;
int x=20;
final int y=30;
public void Animal(){}
public void Animal(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void show()
{
System.out.println("动物:"+name+"--年龄:"+age);
}
public abstract void eat();//抽象方法
}
class Dog extends Animal//一个类继承抽象类,要么本身是抽象类,要么就重写父类所有抽象方法。
{
public void Dog(){}
public void eat()//每个狗吃的东西都不一样,把吃的方法提取出来,强制让子类完成功能。
{
System.out.println("狗吃屎");
}
public void speak()
{
int x=40;
int y=50;
System.out.println(x);
System.out.println(y);
}
}
class 抽象
{
public static void main(String[] args)
{
//多态
Animal a=new Dog();
a.setName("死狗");
a.setAge(10);
a.show();
a.eat();
//Animal a1=new Animal();//抽象类是不能实例化的
Dog d=new Dog();
d.speak();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2