标签:print 不可 animal 函数名 静态方法 UNC 特殊 内容 实例化
摘要:JAVA interface & abstract
界面 & 抽象类
抽象定义:抽象就是从多个事物中将共性的,本质的内容抽取出来。
ex:?狼和狗共性都是犬科,犬科就是抽象出来的概念。鸟跟飞机都会飞,但飞的内容不同
抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
abstract class Action{
?????? abstract void fly();
}
抽象类特点:
1.??????????抽象方法一定在抽象类中
2.??????????抽象方法和抽象类必须被abstract关键字修饰
3.??????????抽象类不可以用new创建物,因为使用抽象方法没意义
4.??????????抽象类中的方法要被使用,必须由子类覆写所有抽象方法后,建立子类对象调用。如果子类只覆写了部分抽象方法,那该子类还是一个抽象类
抽象类和抽象方法必须用abstract关键字来修饰。
抽象方法只有方法声明,没有方法体,定义在抽象类中。格式:修饰符abstract?返回数值类型函数名(参数清单)?;抽象类不可以被产生实例,也就是不可以用new创建对象。原因如下:抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。而且抽象类即使创建了对象,调用抽象方法也没有意义。抽象类通过其子类产生实例,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。
特殊说明:
抽象类中也可以不用包含抽象方法,其代表的是该抽象类只是不想被实例化
界面:
interface {},界面中的成员修饰符是固定的。
成员常量:public static final
成员函数:public abstract
界面的出现将“多继承”通过另一种形式体现出来,即“多实现”。
界面是对外暴露的规则。
界面是程序的功能扩展。
界面可以用来多实现。
类与界面之间是实现关系,而且类可以继承一个类且同时实现多个界面。
界面与界面之间可以有继承关系。
定义:某一类事物的多种存在形态。
interface Person{
?????? public static final int age;
?????? public abstract void say();
}
子类需实践界面所有方法后才可以实例化,否则子类会成为抽象类
多态:
多态的存在提高了程序的扩展性和后期可维护性
前提:需要存在继承或者实现关系,即要有覆写操作
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("吃鱼");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("吃肉");
}
}
class Hello{
public static void main(String[] args){
show(new Cat());
show(new Dog());
}
public static void show(Animal a){
a.eat();
}
}
Animal a = new Cat();??向上转型
a.eat();
若要使用Cat类独特的方法时,再使用向下转型
Cat b = (Cat)a;
向下转型后就可使用其特有的方法,即Animal类不具有的方法。而向下转型必须先要有向上转型的前提下才可以使用。
instanceof:
instanceof用来判断是否属于某一个类,可以用在向上转型后,在向下转型时是否正常
ex:
if(a instance Cat)
多态的引用:
成员方法:是看右边的类,前提是子类有覆写父类方法
成员变量:是看左边的类。
在静态方法中,是看左边的类。
ex:
class A{
int num = 1;
void show(){
System.out.print("Function: A");
}
}
class B extends A{
int num = 2;
void show(){
System.out.print("Function: B");
}
}
class Hello{
public static void main(String[] args){
A a = new B();
System.out.println(a.num); //输出 1
a.show(); //输出 Function: B
}
}
内部类:
-
将一个类定义在另一个类的里面,对里面那个类就称为内部类,内部类可以直接访问外部类中的成员,包括私有成员。
-
而外部类要访问内部类中的成员必须要建立内部类的对象。
-
内部类定义在成员位置上可以被private static成员修饰符修饰。被static修饰的内部类只能访问外部类中的静态成员。
内部类定义在局部位置上也可以直接访问外部类中的成员。
同时可以访问所在局部中的区域变量,但必须是被final修饰的。
内部类可以继承或实现一个外部类或者界面。
格式为:
new?外部类名或者界面名(){覆盖类或者界面中的代码,(也可以自订内容)}
简单理解:就是建立一个建立一个带内容的外部类或者界面的子类匿名对象。
class A{
int num = 1;
class B{
int num = 2;
}
}
class Hello{
public static void main(String[] args){
A.B a = new A().new B();
System.out.println(a.num); //输出 2
}
}
原文:大专栏 JAVA interface & abstract
JAVA interface & abstract
标签:print 不可 animal 函数名 静态方法 UNC 特殊 内容 实例化
原文地址:https://www.cnblogs.com/petewell/p/11509949.html