Java继承、封装、多态、抽象
代码开发的原则:
低耦合、高内聚
耦合:类与类之间的关系;内聚:为类自己完成事件的能力;
Java继承
继承:使用关键字extends实现,是类与类之间的关系,与现实生活的中的父子继承关系本质相似,为一个类从另一个类中获取属性和方法的过程;
1、单继承性
a) Java中一个类仅且只能继承一个类中的属性和方法,在子类中进行属性或方法的扩展;
b) 优势:提过了代码的复用性和可维护性,实现多态的前提条件,使类与类之间产生关系。
c) 弊端:由于类与类之间的关系,使得类的耦合性增强,改变父类时可能对子类造成影响;
d) 实例:
package cn.hxzy.testExtend;
public class Test {
public static void main(String[] args){
Person teacher = new Teacher();
teacher.say();
Person student = new Student();
student.say();
}
}
class Person {
String name;
int age;
String sex;
void say(){
System.out.println("hello world!");
}
}
class Student extends Person {
String hobby;
void doing(){
System.out.println("好好学习!");
}
}
class Teacher extends Person {
String job;
void teach(){
System.out.println("教书育人");
}
}
2、多继承性
a) Java是通过实现接口(interface)来实现类的多继承性的;
b) 实现的接口与接口间使用”,”进行隔开;
c) 实例:
public class TtesIn implements ActionListener,MouseListener{
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
Java封装
封装:指利用抽象数据类型将数据及基于数据的操作封装在一起,构成相互不可分割的独立实体,数据及方法被保留在对象的内部,只保留一些对外的接口与外界建立联系;
优势:良好的封装可以降低代码的耦合性,提高内聚性;提高代码的可维护性,类内部的结构可以任意的修改;隐藏信息,实现细节,是代码简明;
Java多态
多态:指一个类可能存在多种不同的存在形式:例如obj类既是people的父类同时也是teacher的父类,可以通过父类引用子类实现不同的表现形式;
1、多态存在的三个条件:
类与类间存在继承关系;类中实现方法的重写;父类变量引用子类对象;
实例:
public static void main(String[] args){
Person teacher = new Teacher();
teacher.say();
Person student = new Student();
student.say();
}
2、使用多态形式调用代码的原则:
a) 检查父类中是否存在要调用的方法或属性,如果存在则之间调用;如果没有则编译错误;
b) 检查父类中的方法是否在子类中被修改覆盖,如果覆盖则调用子类中的方法;
3、静态和动态绑定
a) 静态绑定:如果方法的修饰符是private、static、final(static和final将在后续讲解),或者是构造方法,那么编译器将可以准确地知道应该调用哪个方法,我们将这种调用方式 称为静态绑定(static binding)。
b) 动态绑定:调用的方法依赖于对象的实际类型, 并在运行时实现动态绑。
4、多态对象的类型转换
a) 类间存在继承关系,子类转换为父类为向上转型,父类转换为子类为向下转型,但是父类不能直接强制转换为子类,需要通过先将子类转换为父类,然后在将该父类对象转换为子类,实现向下转型,否则会出现java.lang.ClassCastException的类转换异常;
Java抽象
抽象:使用abstract修饰的类,内部方法只有方法名,不存在方法体。需要在子类中继承使用,完成完成方法的实现;其中包含一个或多个抽象方法的类也必须被声明为抽象类。使用 abstract 修饰符来表示抽象方法和抽象类。抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。
实例:
abstract class Person {
String name;
int age;
String sex;
public abstract void say();
}
class Student extends Person {
String hobby;
void doing(){
System.out.println("好好学习!");
}
//子类中实现父类的抽象方法
@Override
void say(){
// TODO Auto-generated method stub
System.out.println("hello world!");
}
}