------- android培训、java培训、期待与您交流! ----------
- Java面向对象编程知识点总结。
一:final关键字。
-
final关键字可以修饰类、方法和变量。
-
final修饰的类不可以被继承,是为了避免被子类修改功能。
-
被final修饰的方法不能被复写。
-
被final修饰的变量是一个常变量,只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。(但描述一些事物时,一些数据的出现是固定的,那么这时为了增强阅读性,都给这些值起一个名字,以方便阅读)
如: final int PI = 3.14;
5.常变量的书必须全大写,多个单词组成则为全大写下划线连接。如:PI_MATH。
二.抽象类。
当多个类中出现相同的功能,但功能的主体不同,这时要向上抽取,只抽取功能的定义,而不抽取功能的主体。
1.抽象:1.抽象方法一定要定义在抽象类中。2.抽象方法和抽象类都必须被abstract关键字修饰。3.抽象类不可以使用new创建对象,因为抽象类的方法没有方法主体,调用无意义。4.抽象类中的方法要使用,必须由子类复写其所有的抽象方法后,建立子对象的调用。如果子类只覆盖了部分的抽象功能,那么该子类还是一个抽象类。
2.抽象类的描述:抽象类同一般类没有太大的区别,该如何描述事物还若何描述,只不过该类中出现了一些抽象的或者说是看不懂的东西。这些不确定的东西也是该事物的功能需要明确出现,但是无法定义其方法主体,所以通过抽象方法表示出来。抽象类只是比普通类多了一个抽象方法。
3.模板方法:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该子类去完成。
如下代码所示:
abstract class GetTime
{
public final voidgetTime()
{
long start = System.currentTimeMillis();//获取系统开始运行时间。
runCode();//调用不确定的父类抽象方法
long end =System.currentTimeMillis();//结束时间
System.out.println("用时:"+(end -start));
}
public abstract void runCode();//定义不确定方法为抽象方法。
}
class Son extends GetTime
{
public void runCode()//子类复写其父类的抽象方法
{
for(int i =0;i<=10000;i++)
{
System.out.println(i);
}
}
}
class ModelDemo
{
public static voidmain(String[] args)
{
Son son = new Son();
son.getTime();//掉用对象方法测试结果。
}
}
三.接口。
当抽象类中的方法都是抽象的,那么该类可以使用接口的方式表示,class用于定义类部分抽象,interface用于定义接口全部抽象。
1.接口成员:1.常量和成员方法为全部抽象。2.接口中的成员都有固定的修饰符:常量的修饰符必须是:public static final。3.方法的修饰符必须是:public
abstract。所以接口中的成员全是public,若不加修饰符系统将自动添加完全。所以书写时只写变量和方法的类型就可以,但不好识别。抽象的方法后边跟分好。2.子类实现父类使用implement关键字。
Implement与extends的区别,implement表示子类对接口的功能的实现,而不是继承。对于变量因为其为static类型,所以通过静态的属性去访问如使用接口名调用,也可以使用子类的名去掉用,因为其是共享数据。而且其不能被重写(final修饰)。extends是子类继承父类的全部属性。
3.接口也不可以创建对象,因为其全部为抽象方法,需要被子类实现,之类对接口中的功能要全部复写后,子类才可以创建对象。
4.接口可以被类多实现。Java语言不支持多继承,但支持多实现,一个子类可以实现多个接口的功能
5.接口的特点1、接口是对外暴漏的。2、使程序可以功能扩展。3、可以多实现,降低耦合性。4、类与接口之间是是实现关系,而且类可以继承自一个类的同时,还可以实现多个接口。
四.多态。
可以理解为事物存在多种形态。如:同一方法存在不同的函数功能(重写),抽象父类的引用可以指向子类对象。
-
多态的前提:必须类与类之间有继承或实现的关系,并且存在重写才能使用。
2.多态的应用:
abstractclass Animal
{ public static int NUM = 10;
public int x = 21;
abstract void eat();
abstract void run();
public void wow()
{
System.out.println("let mespeak");
}
}
//------------------------------------------------------------
class Catextends Animal
{ public int x = 10;//
public void eat()
{
System.out.println("let me eatsomething"+NUM);
}
public void run()
{
System.out.println("let me walk");
}
public void sleep()
{
System.out.println("let me sleep");
}
}
//--------------------------------------------------------------
class Dogextends Animal
{
public voideat()//---------------------------------------
{
System.out.println("let me eatbone");
}
public voidrun()//---------------------------------------
{
System.out.println("let me run");
}
public void wow()
{
System.out.println("let me wow");
}
}
//--------------------------------------------------------------
class AbsDemo
{
public static void main(String[] args)
{
Animal cat = new Cat();
Animal dog = new Dog();
kind(cat);
kind(dog);
System.out.println(Animal.NUM+dog.NUM);
Cat c = (Cat)cat;
c.sleep();
}
publicstatic void kind(Animal a)
{
a.eat();
a.run();
a.wow();
System.out.println(a.x);
}
}
//--------------------------------------------------------------