类的封装:
1,java中,对象就是一个封装体。封装是把对象的属性和服务结合成一个独立的的单位。并尽可能隐藏对象的内部细节(尤其是私有数据)
2,目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而使软件错误能够局部化,减少差错和排错的难度。
3,简单来说,“隐藏属性、方法或实现细节的过程”称为——封装。
4,封装的特性:
4.1设置对象中的成员变量和方法的访问权限(public,private,protected)
4.2提供一个统一供其他类引用的接口,比如public 方法
4.3其他对象不能直接修改本对象的私有属性和方法
4.4包:类空间的划分单位
Java继承:
继承是为了让代码重复使用,提高效率,在此基础上衍生出更多的新类。继承是面向对象编程的特点,没有继承就不是面向对象编程,而是面向过程了。Java提供了单一继承,通过接口可以实现多重继承。
在Java中,被继承的类叫超类(superclass)或父类,继承超类的类叫子类(subclass)。因此,子类是超类的一个功能上的扩展,它继承了超类定义的所有属性和方法,并且还可以添加特有功能方法。
public class Father{ public String name; 父亲的名字 public int age; 父亲的年龄 public String job; 父亲的工作 } public class Son extends Father{ public String hobby; 儿子的爱好,这个属性是儿子特有的 }
当我们给Son这个类创建对象时,它不仅有自己的hobby属性,还有Father中的三个属性。
继承父类时,还可以继承父类的方法。
public class Father{ public void play(){ System.out.println("我是父亲!"); } } public class Son extends Father(){ @Override ——覆盖(重写)父类的方法 public void play(){ super.play(); ——用super可以用父类的方法 System.out.println("我是儿子!"); ——也可以编写自己的方法 } public void play(String name){ ——重载play()的方法 System.out.println("play:"+name); } public int play(int nub){ ——这也是一个重载方法 return nub; } }
子类继承父类时,子类就有机会重写父类提供的方法(final方法除外),重写要注意:
1、参数表必须和被重写方法的参数列表完全一致; 2、返回类型要和被重写方法的返回类型或者其子类型一致; 3、访问级别限制符不能比被重写的方法强,可以比他弱; 4、重写方法不能抛出新的检查异常或者比被重写方法声明的检查异常更广泛的异常; 5、不能重写final,static的方法 6、重写就是正在实现一个继承的方法
方法重载允许在类中使用相同的方法名称,但是具有不同的参数,应注意一下几点:
1、被重载的方法必须改变参数列表 2、被重载的方法可以改变返回类型 3、被重载的方法可以改变访问修饰符 4、被重载的方法可以声明新的或更广泛的异常 5、方法能够在同一个类中或者在子类中被重载
多态:
多态是面向对象的重要特性,简单来说就是“一个接口,多种实现”。多态是同一个行为具有不同的表现形式或形态的能力。
我们常说的宠物,它就有多种表现形式,比如:狗、猫等等。现在我们有一个Pet(宠物)的类,它有一个子类Dog(狗),我们在创建对象可以:Pet pet = new Pet();也可以Pet pet = new Dog();两种方式都可以创建pet对象,也就是说pet既可以是一个普通的Pet对象,也可以是Dog对象。所以可以看出同一个Pet可以有不同的表现形式,这就是多态。
但是要注意的是,在创建 Pet pet = new Dog();时,pet不能访问Dog的私有属性和方法,这是因为在编译时,pet是一个Pet类型,只能访问Pet类中的属性和方法。就是说,在编译时,pet是一个Pet类,而不是Dog类。想要让其变成Dog类的话,需要强制转换:Dog dog = (Dog)pet;这时,dog就可以访问Dog类中的私有属性和方法了。
还要注意的是:方法没有多态的说法,严格说多态是类的特性。但是也有对方法说多态的,比如前面提到的方法覆盖称为动态多态,是一个运行时问题;方法重载称为静态多态, 是一个编译时问题。