您的位置:首页 > 编程语言 > Java开发

Java学习第六课--面向对象的三大特性(封装、继承和多态)

2013-11-19 20:52 816 查看
封装:

       封装是隐藏掉了实现的细节,将属性私有化,提供公有的方法访问私有的属性。这样做的好处是防止外界对属性进行不合理的更改,同时也提高了软件开发的可维护行和安全性。如一辆汽车一样,用户只需知道那个是油门,那个是刹车就可以了,不需要知道他们是如何实现油门和刹车功能的。

代码如下:

public class Student
{
private String name ;
private int age ;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
Student st = new Studnet() ;
st.setName("zhangsan") ;
String name = st.getName() ;  //通过类提供的公有方法访问类的私有属性

        上例中我们提供了setter()和getter()方法,我们可以在setter()方法中添加代码来限制对象的存取限。student中是有age属性的,我们可以在setter()方法中,添加if()语句,如果学生的年龄不复合要求我们可以为其添加一个默认的值。或者告诉用户输入不成功 ,增加了安全性。

继承:

     一个类从另一个类派生而来,派生类自动具有了被继承类的所有的特性。被继承的类叫做父类,继承父类的类叫做子类。继承了父类的子类自动具有了父类的属性和方法。但是子类无法使用父类中用private修饰的成员变量和方法 ,这也和被private修饰的成员只能被这个类本身访问一致。使用继承的一个好处是有效的实现了代码的复用,提高了软件开发的效率。子类中除了具有父类的属性和方法之外,也可以定义自己的属性的方法。就像一个孩子只能有一个亲生父亲一样,Java中的继承是单继承,即:一个类只能有一个父类。所有的Java类都直接或者是间接的继承了Object类,Object类是所有Java类的祖先,在这个类中定义了所有的Java对象都具有的相同行为。Java类没有多继承,但是可以通过实现借口的方式,来达到多继承的目的,Java是允许实现多个接口的。实现继承要使用extends
关键字。子类调用父类的方法,要使用super关键字。

格式为 : <修饰符>  class  子类名  extends  父类名 { //代码  }  

      当两个类发生了继承关系的时候,父类中有的子类也有;父类中没有的子类可以增加,允许子类定义自己的特性;父类中有的允许子类对它进行改变,即方法的重写。

方法重写:

      子类和父类的方法具有相同的名称,参数列表,访问修饰符和返回类型。

代码如下:

public class Farther
{
public void speak()
{
System.out.println("Father中的方法");
}
}
public class Son extends Farther
{
@Override
public void speak()
{
System.out.println("孩子中的方法");
}
}

     继承关系中如果子类重写了父类的方法,那么在创建子类的时候调用的是子类重写后的方法,如果子类没有重写父类中的方法,当子类在调用方法的时候,会调用父类中的该方法,行为与在父类中定义的一致。子类不能重写父类中被private修饰的方法。子类也不能继承父类的构造方法,在实例化子类要使用spuer 或者是this关键字来说明调用父类中哪个构造方法或者是子类重载的其他构造方法。子类在使用super("args")调用父类的构造方法是,必须放在构造方法的第一句,子类在实例化时,实际上是先调用父类的构造方法,然后在调用子类的构造方法。
如果没有显示的声明的,则默认调用父类的无参构造方法。父类的静态方法不能被子类重写问非静态方法,父类的非静态方法也不能被子类重写为静态方法。

方法重载:

      两个或者是多个方法的名字相同,但是参数列表不同(可以是参数的个数不相同,也可是参数的类型不相同),方法的返回值类型对方法重载没有影响。方法的重载发生在同一个类中

      代码如下:

public Student(String name,int age,String school)
{
this(name,age) ; // 明确调用父类中有两个参数的构造方法
this.school = school ;
}
public Student(String name,int age)
{
super(name,age) ;
}
方法重载与方法重写的异同点:

相同点:都要求方法同名

不同点:方法重写对参数列表,返回类型,修饰符都要求一样,而方法重载是方法名要相同,返回类型不会影响方法重载。方法重写放生在子类和父类之间,方法重载发生在类内部的两个或者多个方法。子类只能重写父类的方法一次,而重载可以发生多次。

多态:

       父类的某一个方法被子类重写时,可以各自产生自己的功能行为,多态具有变现多种形态的能力特征。父类型的引用指向了子类型的对象。由于子类重写了方法,在父类在调用方法时可以有多种形态。方法重载是实现多态的方法之一。

     向上类型转换:父类的引用指向了子类型的对象,Person  person  = new Male() ; Male是Person的子类,也可以看作是一个Person  ,属于向上转型,所以向上转型无需强制类型转换。

    向下类型转换: 将一个父类型转换为子类型。Person per = new Male() ; Male ma = (Male) per ; 将父类型强制转换为子类的引用。Male  male = (Male) new Person ; 这种写法是不正确,虽然编译可以通过但是在程序运行的时候会抛出ClassCastException异常。父类可以是多种形态的,不能将父类强制转化为一个子类。

绑定:

    所谓绑定就是在对象引用和对象实例之间建立联系。有静态绑定和动态绑定两种,静态绑定实在编译期建立联系,动态绑定是在程序运行期建立联系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息