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

浅谈Java面向对象三大特征--继承

2013-07-24 22:21 369 查看
Java面向对象的三大特征---继承

一:什么是继承? 继承就是在已经存在的类(父类)的基础上创建新类(子类)的过程,子类可以添加自己的新方法,也可以用父类的功能。

package LQQ;
public class Test {
public void method(){
System.out.println("我是父类");
}
}
class Sub extends Test{
@Override
public void method() {
// TODO Auto-generated method stub
super.method();//继承了父类的方法
}
public void method2(){
System.out.println("我是子类");
}
}

二:什么时候建立父子关系(继承)?
任何A出现的地方,换做B之后仍然成立,这是A和B之间可以建立继承关系。
三:继承来的东西?
a:私有的属性被隐藏,可以通过get、set方法来访问
package LQQ;
public class Test {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Sub extends Test {
public static void main(String[] args) {
Sub sub = new Sub();
sub.setAge(10);// 继承自父类可访问的一般属性及方法
System.out.println(sub.getAge());// 继承自父类可访问的一般属性及方法
}
}

b:构造方法不被继承

package LQQ;
public class Test {
public Test(){
}
}
class Sub extends Test {
public Test(){//有异常,因为无法继承父类的构造方法
}
}

c:私有方法不被继承

package LQQ;
public class Test {
private void test(){
System.out.println("我是父类");
}
}
class Sub extends Test {
public static void main(String[] args) {
Sub sub=new Sub();
sub.test();//有异常,对父类私有方法不能继承
}
}

d:继承一般属性及方法

package LQQ;
public class Test {
public int age;
public void test(){
System.out.println("我是父类");
}
}
class Sub extends Test {
public static void main(String[] args) {
Sub sub=new Sub();
sub.age = 10;//对父类一般属性的继承
sub.test();//对父类一般方法的继承
}
}

四:在子类中使用和父类一样的属性名,没有任何意义,应尽量避免。
五:重载和重写的区别
1:重写(又叫覆写、覆盖)
a:发生在父子类中

package LQQ;
public class Test {
public void test(){
System.out.println("我是父类");
}
}
class Sub extends Test {
public void test(){
System.out.println("我是子类");
}
}

b:同名同参同返回

package LQQ;
public class Test {
public int  test(int a,int b){
return a+b;
}
}
class Sub extends Test {
public int  test(int a,int b){
return a-b;
}
}

c:子类方法的修饰符不能比父类方法的修饰符更封闭

package LQQ;
public class Test {
public int  test(int a,int b){
return a+b;
}
}
class Sub extends Test {
private int  test(int a,int b){
//有异常,因为父类的同名方法是public,子类只能是比public不封闭的修饰符
return a-b;
}
}

d:子类抛出的异常不能比父类抛出的异常更宽泛

package LQQ;
import java.io.FileNotFoundException;
public class MyException {
public void test() throws FileNotFoundException{
}
}
class Subb extends MyException{
public void test() throws Exception{
//有异常,子类最次也得是FileNotFoundException,而不能是比这个还宽泛的异常
}
}
2:重载
a:发生在同一个类中

package LQQ;
public class Test {
public int  test(int a,int b){
return a+b;
}
public int  test(int a){
return a;
}
}

b:同名不同参,返回类型没要求。这里的不同指的是参数的个数,顺序,类型的不同。

package LQQ;
public class Test {
public double  test(double a,int b){
return a+b;
}
public double test(int a,double b){//顺序的不同
return a+b;
}
public int  test(int a){//个数的不同
return a;
}
public String  test(String a,String b){//类型的不同
return a.concat(b);
}
}

好困啊。。。先睡了哈



本文出自 “辛德瑞拉” 博客,请务必保留此出处http://cinderella7.blog.51cto.com/7607653/1256589
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: