内部类、异常类、异常类

论坛 期权论坛     
匿名小用户   2019-10-20 18:34   159   0
<!-- flowchart 箭头图标 勿删 -->
                    <svg style="display: none;">
                        <path d="M5,0 0,2.5 5,5z" id="raphael-marker-block" stroke-linecap="round" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                    </svg>
                                            <p>我们已经知道,类可以有两种重要成员:成员变量和方法,实际上,Java还允许类可以又一种成员:内部类。 <br>
Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类。 <br>
<strong>内部类和外嵌类之间的重要关系如下:</strong> <br>
1、内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。 <br>
2、内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。 <br>
3、内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。 <br>
下面我们举个例子吧: <br>
RedCowForm 类:</p>



<pre class="blockcode"><code class="hljs java"><span class="hljs-keyword">package</span> Example20;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">RedCowForm</span> {</span>
    <span class="hljs-keyword">static</span> String formName;
    RedCow cow;<span class="hljs-comment">// 内部类声明对象</span>
    RedCowForm() {

    }
    RedCowForm(String s){
        cow = <span class="hljs-keyword">new</span> RedCow(<span class="hljs-number">150</span>,<span class="hljs-number">112</span>,<span class="hljs-number">5000</span>);
        formName = s;
    }
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">ShowMessage</span>(){
        cow.speak();
    }
    <span class="hljs-javadoc">/**
     * 声明内部类
     *<span class="hljs-javadoctag"> @author</span> 10497
     *
     */</span>
    class RedCow{
        String cowName = <span class="hljs-string">"红牛"</span>;
        <span class="hljs-keyword">int</span> height,weight,price;
        RedCow(<span class="hljs-keyword">int</span> h,<span class="hljs-keyword">int</span> w,<span class="hljs-keyword">int</span> p) {
            <span class="hljs-keyword">this</span>.height =h;
            <span class="hljs-keyword">this</span>.weight =w;
            <span class="hljs-keyword">this</span>.price = p;
        }
        <span class="hljs-keyword">void</span> speak(){
            System.out.println(<span class="hljs-string">"我是"</span> + cowName + <span class="hljs-string">",身高:"</span> + height
                    + <span class="hljs-string">"cm,体重:"</span> + weight + <span class="hljs-string">"kg,生活在:"</span> + formName);
        }
    }<span class="hljs-comment">//内部类结束</span>
}
</code></pre>

<p>主函数调用: <br>
package Example20;</p>

<p>public class Application {</p>

<pre class="blockcode"><code>public static void main(String[] args) {
    RedCowForm form = new RedCowForm("红牛农场");
    form.ShowMessage();
    form.cow.speak();
}
</code></pre>

<p>} <br>
内部类和外嵌类可以相互调用方法。</p>

<p><strong>关于匿名类</strong> <br>
和子类有关的匿名类</p>

<p>首先,我们讨论一下,假如没有显示地声明一个类的子类,而又想用子类创建一个对象,那么该如何实现这样的目的呢?Java允许我们直接使用一个类的子类的类体创建一个子类对象,也就算说,创建子类对象时,除了允许使用父类的构造方法之外还有类体,此类体被认为是一个子类去掉类声明对后的类体,称作匿名类。匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象。 <br>
匿名类有一下特点: <br>
1、匿名类可以继承父类的方法也可以重写父类的方法。 <br>
2、使用匿名类时,必然是在某个类中直接使用匿名类创建对象,因此匿名类一定是内部类。 <br>
3、匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法。 <br>
4、由于匿名类是一个子类,但没有类名,所以在用匿名类创建对象时,要直接使用父类的构造方法。</p>

<p>下面我们举个例子吧:</p>

<p>抽象父类:</p>



<pre class="blockcode"><code class="hljs java"><span class="hljs-keyword">package</span> Example21;
<span class="hljs-keyword">abstract</span> class OutputAlphabat {
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">abstract</span> <span class="hljs-keyword">void</span> <span class="hljs-title">output</span>();
}
</code></pre>

<p>子类:</p>



<pre class="blockcode"><code class="hljs java"><span class="hljs-keyword">package</span> Example21;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">OutputEnglish</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">OutputAlphabat</span> {</span>
    <span class="hljs-comment">//输出英文字母的
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:50
帖子:1079
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP