java第七章总结

7.1 类的封装

封装是面向对象的核心思想,将对象的属性和行为封装起来,其载体就是类。

public class H7_2 {//创建类
    public static void main(String[] args) {//主函数
      Cook1 cook = new Cook1();              // 创建厨师类的对象
          System.out.println("**请让厨师为我做一份香辣肉丝。***");  //输出
          cook.cooking("香辣肉丝");                 // 厨师烹饪香辣肉丝
          System.out.println("**你们的厨师叫什么名字?***");//输出**你们的厨师叫什么名字?***
          System.out.println(cook.name);      // 厨师回答自己的名字
          System.out.println("**请让厨师给我切一点葱花。***");//输出**请让厨师给我切一点葱花。***
          cook.cutOnion();      // 厨师去切葱花
         }
        }
 
        class Cook1 {   //创建Cook1类
         String name;// 厨师的名字
 
         public Cook1() {            //普通类
          this.name = "Tom Cruise"; // 厨师的名字叫Tom Cruise
         }
 
         void cutOnion() {       // 厨师切葱花
          System.out.println(name + "切葱花");  //输出厨师切葱花
         }
 
         void washVegetavles() {    // 厨师洗蔬菜
          System.out.println(name + "洗蔬菜");  //输出厨师洗蔬菜
         }
 
         void cooking(String dish) {// 厨师烹饪顾客点的菜
          washVegetavles();     //洗蔬菜
          cutOnion();             //切洋葱
          System.out.println(name + "开始烹饪" + dish); //输出name + "开始烹饪" + dis
}}
 

**请让厨师为我做一份香辣肉丝。***
Tom Cruise洗蔬菜
Tom Cruise切葱花
Tom Cruise开始烹饪香辣肉丝
**你们的厨师叫什么名字?***
Tom Cruise
**请让厨师给我切一点葱花。***
Tom Cruise切葱花
7.2 类的继承

继承在面向对象开发思想中是一个非常重要的概念,它使整个程序架构具有一定的弹性,在过程中复用已经定义完善的类不仅可以减少软件开发周期,还可以提高软件的可维护性和可扩展性。

7.2.1 extends关键字

在Java中,让一个类继承另一个类,用extends关键字

chlid extands parents
chlid继承了parents类

 

7.2.2 方法的重写

1 .重写的实现

继承并不只是扩展父类的功能,还可以重写父类的成员方法,重写(还可以称为覆盖)就是在子类中将父类的成员方法的名称保留,重写编程成员方法的实现内容,更改成员方法的储存权限,或是修改成员方法的返回值类型。

 

2. super关键字

如果子类重写了父类的方法,就再也无法调用到父类的方法了吗?为了解决这种需求Java提供了super关键字

super.property;//调用父类的属性
super.method();//调用父类的方法

 


 7.2.3 所有类的父类-------Object类

 所有的类都都直接或间接继承了Java.lang.Object类。Object类是比较特殊的类,它是所有类的父类,是Java类层中最高级层类。

Object类中的几个重要方法

1. getClass()方法

getClass().getName();
 getClass()方法是Object类定义的方法,它会返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称。

可以将getClass与toString()方法联合使用

2. toString()方法

toString()方法的功能是将一个对象返回为字符串形式,它会返回一个String实例。在实际的应用中通常重写toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的toString()方法。

 

3. equals()方法

equals()方法比较是两个对象的实际内容。

 

7.3 类的多态

7.3.1 方法的重载 

以不同的方式来实例化对象,就需要使用多个构造方法来完成。由于这些构造方法都需要根据类名进行命名,为了让方法名相同而形参不同的构造方法同时存在,必须用到“方法重载”。

 

7.3.2 向上转型

就是把子类对象赋值给父类类型的变量,这就是向上转型。

具体类转化成抽象类

 

7.3.3 向下转型

 抽象类转换成具体类

7.3.4 instanceof关键字

当程序执行向下转换操作时,如果父类对象不是子类对象的实例, 就会发生Class CastException

异常,所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。判断需要instanceof关键字来操作。

myobject instanceof ExampleClass
// myobject 某类的对象引用
// ExampleClass 某个类
 7.4 抽象类与接口

7.4.1 抽象类与抽象方法

在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。回想继承和多态原理,继承树中越是在上方的类越抽象,如鸽子类继承鸟类、鸟类继承动物类等。在多态机制中,并不需要将父类初始化对象,我们需要的只是子类对象,所以在Java语言中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图形,但他的子类却可以。

Java中定义抽象类时,需要使用abstract关键字,其语法如下:

[权限修饰符] abstract class 类名{
        类体
}
使用abstract关键字定义的类称为抽象类,而使用abstract关键字定义的方法称为抽象方法,抽象方法的定义语法如下:

[权限修饰符] abstract 方法返回值类型 方法名(参数列表);
 抽象方法没有方法体。

构造方法不能定义为抽象方法。

7.4.2 接口的声明及实现

接口是抽象类的延伸,可以将它看作是

接口使用interface关键字进行定义

[修饰符] interface 接口名 [extends 父类接口名列表]{
    [public] [static] [final] 常量;
    [public] [abstract] 方法;
}
一个类的实现一个接口可以使用implements关键字

public class Parallelogram extends Quadrangle implements drawTest{
            
}
 7.4.3  多重继承

在Java中类不允许多重继承,但使用接口就可以实现多重继承,因为一个类可以同时实现多个接口,这样可以将所有需要实现的接口放置在implements关键字后并使用逗号“   ,”隔开,但这可能会在一个类中产生庞大的代码量,因为继承一个接口时需要实现接口中所有的方法。

7.4.4 区分抽象类与接口

 

7.5 访问控制

 

7.5.2 Java类包

 同一个包中的类互相访问时,可以不指定包名。

在类中定义包名的语法如下:

package 包名1[.包名2[.包名3.。。。。。]]
在使用import关键字时,可以指定类的完整描述,但如果为了使用包中更多的类,则可以在包名后加.*,这样表示可以在程序中使用包中的所有类。

import com.lzw.*;     //指定com.lzw包中的所有类在程序中都可以使用
impor com.lzw.Math;   //指定com.lzw包中的Math类在程序中可以使用
7.5.3 final关键字

1.final关键字

定义为final的类不能被继承。

final类的语法如下:

final class 类名{}
如果将某个类的设置为final形式,则类中的所有方法都被隐式地设置为final形式。

 

2. final方法 

定义为final的方法不能被重写。

将方法定义为final类型可以防止子类修改类的定义与实现方式,同时定义final的方法的执行效率要高于非final方法。

3. final变量

 

7.6 内部类

在类中定义一个类,则将在类中再定义的那个类称为内部类。

7.6.1  成员内部类

1.成员内部类简介

在一个类中使用内部类,可以在内部类中直接存取其所在类的私有成员变量。

成员内部类的语法如下

public class OuterClass{
    private class InnerClass{
            //........
    }
}

 

 2. 内部类向上转型为接口

如果将一个权限修饰符为private的内部类向上转型为其父类对象,或者直接向上转型为一个接口,在程序中就可以完全隐式内部类的具体实现过程。

3. 使用this关键字获取内部类与外部类的引用

如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字

 

7.6.2 局部内部类

内部类不仅可以在类中进行定义,也可以在类的局部位置定义,如在类的方法或任意的作用域中均可以定义内部类。

7.6.4 静态内部类

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值