`

4、类与对象之继承、组合、代理、跳出

    博客分类:
  • java
 
阅读更多
面向对象编程的代码复用机制。
继承
继承是OOP中最为重要的概念,达到了非常有效的代码重用效果,使得开发效率变得很高!在Java语言中,两个类之间通过extends关键字实现继承。
class A {   
    public A() {   
        System.out.println("A()!");   
    }   
}   
class B extends A {   
    public B() {   
        System.out.println("B()!");   
    }   
}    
public class ExtendsTest extends B {     
    public ExtendsTest() {   
        System.out.println("ExtendsTest()!");   
    }   
    public static void main(String[] args) {   
        new ExtendsTest();   
    }   
}   
ExtendsTest继承自B,B继承自A,当实例化ExtendsTest的时候,依次打印出A、B、ExtendsTest构造器中的内容,说明:构造器被依次调用了;当子类实现继承时,相当于父类给子类一个实例,故先构造实例,实验中得出结论:在对子类进行初始化的时候,会先调用父类的构造器,如果父类构造器需要传递参数,则使用super关键字来实现就行了。

1、子类不能继承父类私有的域(属性)或者方法。如果想要继承父类的私有对象,只能将private改成protected,因为protected的权限控制在包内。因此一般情况,用到继承的话,最好将父类中的域声明为私有(private,因为一般情况不需要继承成员变量),将方法声明为public,方便继承。
2、当调用子类方法,如果子类有,则屏蔽父类方法;如果子类没有,则去调用父类的同名方法,但是调用者保持是子类。

代理
代理的思想在我们讲的设计模式里面有体现,就是在一个类中持有另一个类的实例,从而代替原类进行一个操作,我们看个例子:
public class ProxyTest {   
    Source source = new Source();   
    void p(int n){   
        source.a(n);   
    }   
    void p2(int n){   
        source.b(n);   
    }   
    public static void main(String[] args) {   
        ProxyTest pt = new ProxyTest();   
        pt.p(20);   
        pt.p2(50);   
    }   
}   
class Source{   
    void a(int n){   
        System.out.println("this is : "+n);   
    }   
    void b(int n){   
        System.out.println("this is : "+n);   
    }   
}   
组合
如果大家还记得设计模式里的建造者模式,那么很容易联想到组合机制,就是将一系列的对象组合在一起,组合成一个功能丰富的类,当然,这些对象包括基本数据类型,也包括引用。来看个例子:
class Soap{   
    private String s;   
    Soap(){   
        System.out.println("soap");   
        s = "constructor";   
    }   
    public String toString(){   
        return s;   
    }   
}   
public class CompronentTest {   
    private String s1 = "happy",s2="Happy",s3,s4;   
    private Soap castille;   
    private int i;   
    public CompronentTest(){   
        s3 = "joy";   
        castille = new Soap();   
    }   
    {   
        i = 88;   
    }   
    public String toString(){   
        if(s4 == null){   
            s4 = "Joy";   
        }   
            return "s1 = " + s1 + "\n" +   
                   "s2 = " + s2 + "\n" +   
                   "s3 = " + s3 + "\n" +   
                   "s4 = " + s4 + "\n" +   
                   "i = " + i + "\n" +   
                   "castille = " + castille;   
   
    }   
    public static void main(String[] args) {   
        CompronentTest ct = new CompronentTest();   
        System.out.println(ct);   
    }   
}   

懒加载涉及持有对象实例,所以会涉及到懒加载的机制,代码中的:
if(s4 == null){
         s4 = "Joy";
}
就是一种懒加载的机制,这种机制就是解决当所需的对象比较庞大的时候,只有在用的时候才去初始化,节省空间,提高效率!

Java中跳出循环的方法:
break是跳出当前for循环,switch语句;
break会跳出(终止)当前循环,continue是跳出当前循环,开使下一循环;
以上两种方法没有办法跳出多层循环,如果需要从多层循环跳出,则需要使用标签,定义一个标签label,然后再需要跳出的地方,用break label就行了,代码如下:
public class RecTest {   
    public static void main(String[] args) {   
          loop: for (int i = 0; i < 10; i++) {   
            for (int j = 0; j < 10; j++) {   
                for (int k = 0; k < 10; k++) {   
                    for (int h = 0; h < 10; h++) {   
                        if (h == 6) {   
                            break loop;   
                        }   
                        System.out.print(h);   
                    }   
                }   
            }   
        }   
        System.out.println("\nI'm here!");   
    }   
}   
012345
I'm here!
continue同理;
012345 012345 012345 012345 012345 012345 012345 012345 012345 012345   //h=6时,跳到loop,执行下一个for命令;
I'm here!
分享到:
评论

相关推荐

    java实现计算圆锥体的表面积和体积(实验文档)

    * `java.rmi`:提供了与远程方法调用相关的所有类 * `java.net`:提供了用于实现网络通讯应用的所有类 * `java.security.*`:提供了设计网络安全方案需要的一些类 * `java.sql`:提供了访问和处理来自于 Java 标准...

    跳出面向对象思想(一)继承

    我会在这篇这一系列文章中谈谈面向对象思想的几个部分,并且给出对应的解决方案,这些解决方案有些是用面向过程的思路解决的,有些也还是停留在面向对象中。到最后我会给大家一个比较,然后给出结论。在进一步地讨论...

    易语言4位特定组合算法

    这个4位特定组合算法的源码可以作为一个基本模板,根据实际需求进行扩展,比如添加条件判断、优化性能或与其他逻辑结合。在易语言中,我们还可以利用其丰富的库函数来简化代码,提高效率。 在解压后的文件"易语言4...

    面向对象程序设计

    对象是类的实例,是从类中创建出来的具体实体,具有类定义的属性和方法。 Java是一种流行的面向对象编程语言,它提供了类和对象的实现机制。在Java中,类的定义使用关键字class,例如: ```java public class ...

    FPGA中组合逻辑和时序逻辑的区别

    1.组合逻辑概念组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关,不涉及对信号跳变沿的处理,无存储电路,也没有反馈电路。通常可以通过真值表的形式表达出来。 2....

    java面向对象面试题

    在一个`.java`文件中可以包含多个类,但是每个文件只能有一个公共类,且文件名必须与这个公共类的名称相同。其他非公共类(即私有或默认访问级别的类)可以任意命名。 #### 8. 排序方法及快速排序实现 常见的排序...

    Java程序员面试宝典.docx

    其中,封装是指将数据和操作数据的方法封装在一起,继承是指子类继承父类的特性,多态是指同一个方法名称可以有不同的实现,抽象是指抽象类和接口的使用,组合是指将多个对象组合成一个新对象。 2. 访问权限修饰符:...

    自测题_8(面向对象一)(答案).pdf

    1. 关键字break用于跳出循环,continue用于跳过当前循环的剩余部分,转到下一次迭代。 2. 关键字struct用于定义结构体,是一种自定义数据类型,可以包含不同类型的数据项。 3. 关键字inline用于指示编译器对特定函数...

    Java基础知识汇总

    本资源涵盖了Java编程语言的基础知识,包括语言的优点、与C++的异同、main函数、静态块、构造函数、浅复制和深复制、面向对象和面向过程的区别、面向对象的特征和优点、继承、多态、抽象类和接口的异同、this和super...

    超级有影响力霸气的Java面试题大全文档

    对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以...

    (面向对象程序设计C++)实践考核报告书.pdf

    1. 类的定义与对象创建: - 文档中提到了一个User类,这个类是面向对象设计中的一个基本概念。类可以定义数据成员(如姓名、账户信息等)和成员函数(如登录、保存密码、记录操作等)。 - User类的构造函数包括无...

    Java软件开发实战 Java基础与案例开发详解 9-8 练习题 共4页.pdf

    - **继承**:一个类可以继承另一个类的属性和方法。 - **多态**:父类引用指向子类对象的能力。 #### 6-1 继承 - **语法**:class 子类名 extends 父类名 {} #### 6-2 object类 - **作用**:所有Java类的直接或...

    北京交通大学《面向对象程序设计》20秋在线作业2-001答案.docx.docx

    14. 派生类与基类访问:私有继承下,派生类不能访问基类的私有成员,即使基类的成员是公有或保护的。 15. 未重载运算符:C++中的`.`和`-&gt;`不能被重载。 16. 抽象类:含有纯虚函数的类称为抽象类,不能实例化。 17...

    Java面向对象程序设计期末复习 必备资料选择填空大题

    Java面向对象程序设计是计算机科学中的核心课程,尤其对于Java开发者来说,理解并掌握面向对象的概念至关重要。在准备期末复习时,重点应放在以下几个方面: 1. **面向对象的基本概念**: - **对象**是计算机逻辑...

    解决excel无法装载这个对象

    在Excel中遇到“无法装载这个对象”的错误通常是由于宏或者某些外部引用的控件组件未能正确注册或与系统不兼容导致的。这个问题涉及到Excel的宏功能、系统环境以及控件的注册,下面我们来详细探讨如何解决这个问题。...

    面向对象程序设计(C++).pdf

    do-while循环与while类似,但不同之处在于它会先执行一次循环体,然后再检查条件,确保至少执行一次循环。 友元是C++中的一个特性,它可以是函数或类,被声明为友元后,它们可以访问另一个类的私有和保护成员。友元...

    C++正确语句.pdf

    4. **虚函数**:虚函数是实现多态性的关键,它不能是静态成员函数,因为静态成员不与特定对象关联。虚函数可以是其他函数的友元,以便在需要时访问非公共成员。 5. **对象和类的关系**:类是对象的蓝图,对象是类的...

    Java面向对象试题分析[借鉴].pdf

    Java面向对象试题分析主要涵盖了Java语言的基础知识,包括面向对象特性、类与对象的关系、异常处理、编译与运行机制、构造函数、多态性、布局管理器、数据类型以及抽象类与接口等核心概念。以下是这些知识点的详细...

    Java期末复习题目 Java期末复习题目 Java期末复习题目

    类和对象的关系是继承关系,子类继承父类的成员和行为。 封装 封装是面向对象编程的主要特点之一,将对象的状态和行为封装在一起,使得对象的实现细节对外部不可见。封装可以提高程序的安全性和可维护性。 类修饰...

    Java面向对象面试题.pdf

    4. JAVA 的事件委托机制和垃圾回收机制:事件委托机制是指将事件处理委托给其他对象,而垃圾回收机制是指 Java 虚拟机自动回收不再使用的对象的内存。 5. 在 JAVA 中,如何跳出当前的多重嵌套循环?可以使用 break ...

Global site tag (gtag.js) - Google Analytics