目录
继承,多态,抽象类与接口
继承和多态是面向对象开发中非长重要的一组概念,继承和多态使用得当,整个程序的构架将变得非常有弹性,同时可以减少代码的冗余性。
一.类的继承
类之间的这种关系被称为关联.关联主要描述两个人类之间的一般二次关系,继承是关联的一种.(继承性主要利用特定对象之间的共有属性)
继承关系可以用树型关系来表示,父类与子类存在一种层次关系.一个类处于继承体系中,它既可以是其他类的父类,为其他类提供属性和行为,也可以是其他类的子类,继承父类的属性和方法,如三角形既是图形类的子类也是等边三角形的父类。
兔子和羊属于食草动物类,狮子和豹属于食肉动物类。
食草动物和食肉动物又是属于动物类。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
在Java语言中一个类要继承另一个类要使用关键字extends格式如下:
class 父类 {
}
class 子类 extends 父类 {
}
二.Object类
在Java中所有的类都直接或间接继承了Object类。Object类是比较特殊的类,它是所有类的父类,是java类层中的最高层类。
2.1 getClass()方法
getClass()方法是Object类定义的方法,它会返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称。
语法:
getClass().getname();
2.2 toString()方法
toString()方法的功能时将一个对象返回为字符串形式,它会放回一个String实例。在实际应用中通常重写toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的toString()方法。
语法:
String toString()//toString():// 返回表示 Integer 值的 String 对象。
static String toString(int i)//toString(int i): 返回表示指定 int 的 String 对象。
2.3equals()方法
equals()方法是一种比较对象的方式,equals()方法比较的是两个对象的实际内容。
实例:
public class Test{
public static void main(String args[]){
Integer x = 5;
Integer y = 10;
Integer z =5;
Short a = 5;
System.out.println(x.equals(y));
System.out.println(x.equals(z));
System.out.println(x.equals(a));
}
}
/*输出结果如下:
false
true
false
*/
三.对象类型的转换
对象类型的转换在java编程中经常遇到,主要包括向上转型和向下转型操作。
3.1向上转型
向上转型可以被可以被理解为将子类类型的对象转换为父类类型的对象,即把子类类型的对象直接赋值给父类类型的对象,进而实现按照父类描述子类的效果。
通俗地讲即是将子类对象转为父类对象。
Father f1 = new Son();//向上转型
3.2向下转型
与向上转型相反,即是把父类对象转为子类对象,但是,运用向下转型,如果把一个较抽象的类的对象转换为一个更具体的类的对象,这样的转型通常会出现错误。
格式:要实现向下转型,需要借助强制转换。
子类类型 子类对象 =(子类类型)父类对象;
Girl g2=new Girl();
MMGirl mmg1=(MMGirl)g2; //不安全的向下转型,编译无错但会运行会出错
四.使用instanceof关键字判断对象类型
instanceof它的作用是测试它左边的对象是否是它右边的类的实例,返回布尔的数据类型。instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
calss Quadrangle{}
calss Square extends Quadrangle{}
calss Cicular{}
public class Domo5{
public static void main(String[]args){
Quadrangle q=new Quadrangle();//四边形对象
Square s=newSquare();//正方型对象
System.out.println(q instanceof Square)//判断四边型是否为正方形的子类
System.out,println(s instanceof Quadrangle);//判断正方形是否为四边型的子类
}
/*运行结果为:
false
true
*/
五.方法的重载
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载的定义:
方法名相同
方法的参数类型,参数个不一样
方法的返回类型可以不相同
方法的修饰符可以不相同
main 方法也可以被重载
实例:
public class A {
void test(){
System.out.println(“1”);
}
void test(int a){
System.out.println("a: "+a);
}
}
六.final关键字,方法,类
final被译为“最后的”,final是java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的,final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类,使用 final 关键字声明类,就是把类定义定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写。
语法:
final class 类名 {//类体}
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
七.多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。
多态存在的三个必要条件继承,重写,父类引用指向子类对象:Parent p = new Child();
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
实例:
class Shape{}//图形类
class Square extends Shape{}//正方形继承图形类
class Circular extends Shape{}//圆形类继承图形类
public class Shape{
public static void draw(Shape s) {//绘制方法
if(s instanceof Square) {//如果是正方型
System.out.print("绘制正方形");
}
else if(s instanceof Circular){//如果是圆形
System.out.println("绘制圆形")
}
else {//如果是其它图形
System.out.println("绘制父类图形")
}
}
public static void main (String[] args) {
draw(new Shape());
draw(new Square());
draw(new Circular());
}
}
抽象类与接口
抽象类
使用absteact关键字定义的类叫抽象类,而使用这个关键字定义的方法称之抽象方法,抽象方法没有方法体,这个方法本身没有意义,除非被重写,而承载这个抽象方法的抽象类必须被继承,抽象类除了被继承没有任和意义,定义抽象类的语法:
public abstract class dog{
adstract void testAbstract();
}
接口
接口是抽象类的衍生,可以将他看作是纯粹的抽象类,接口中的所有方法都有方法体,drwa()方法的类实现这个接口接口使用interface关键字定义,语法:
public interface Dog{
}
一个类继承一个父类的同时再实现一个接口,语法:
public class parallelogram extends Dog implements QWQ{
}