继承与多态(2)

简介: 继承与多态(2)

4、多态


4.1 多态的概念


多态是继封装、继承之后,面向对象的第三大特性。

多态: 是指同一行为,具有多个不同表现形式。


4.2 多态的体现


格式:

父类名称 对象名 = new 子类名称();

或者

接口名称 对象名 = new 实现类名称();


代码示例:


//定义父类
public class Fu {
    public void method(){
        System.out.println("父类方法");
    }
}


//定义子类
public class Zi extends Fu{
    @Override
    public void method() {
        System.out.println("子类方法");
    }
}


//

//定义测试类
public class Demo01Multi {
    public static void main(String[] args) {
        //使用多态写法
        Fu obj = new Zi();
        obj.method();
    }
}


5、final关键字


final关键字: 不可改变。可以用于修饰类、方法和变量。


类:被修饰的类,不能被继承。

方法:被修饰的方法,不能被重写。

变量:被修饰的变量,不能被重新赋值。


5.1使用方法


修饰类

格式:

final class 类名 {

}

注意:一个类如果是final的,纳闷这个类不能有任何子类。且其中所有的成员方法都无法进行覆盖重写。


修饰方法

格式:

修饰符 final 返回值类型 方法名(参数列表){

//方法体

}

注意:1、当final关键字修饰一个方法时,这个方法就是最终方法,也就是不能进行覆盖重写。2、对于类、方法来说,abstract关键字和final关键字不能同时使用。


修饰局部变量

注意:一旦使用final关键字来修饰局部变量,那么这个变量就不能改变

“一次赋值,终生不变”


代码示例:



/

public class FinalDemo1 {
public static void main(String[] args) {
// 声明变量,使用final修饰
final int a;
// 第一次赋值
a = 10;
// 第二次赋值
//a = 20;  报错,不可重新赋值
// 声明变量,直接赋值,使用final修饰
final int b = 10;
// 第二次赋值
//b = 20;  报错,不可重新赋值
}
}


成员变量

如果使用final关键字,那么这个变量也照样不可改变。

注意:

1、由于成员变量具有默认值,所以用了final之后就必须手动赋值,不会再给默认值了。

2、对于final的成员变量,那么使用直接赋值,那么通过构造方法赋值。二者选其一

3、必须保证类当中所有重载的构造方法,都会最终对final的成员变量进行赋值。


6、权限修饰符


在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,


  • public:公共的。
  • protected:受保护的
  • default:默认的
  • private:私有的

public >protected >default > private

微信图片_20221009123150.png



编写代码时,如果没有特殊的考虑,建议这样使用权限:


  • 成员变量使用 private ,隐藏细节。
  • 构造方法使用 public ,方便创建对象。
  • 成员方法使用 public ,方便调用方法。


7、内部类


将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。


7.1 成员内部类


定义在类中方法外的类。

格式:

class 外部类名称 {

class 内部类名称{

}

}

注意:

1、内部类可以直接访问外部类的成员,包括私有成员。

2、外部类要访问内部类的成员,必须要建立内部类的对象。


内部类的使用方法

1、间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法

2、直接方式:

类名称 对象名 = new 类名称();

【外部类名称. 内部类名称 对象名 = new 外部类名称 ( ) .new 内部类名称 ( ); 】

注意:内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。

比如,Person $ Heart.class


代码示例:


//定义类
public class Body {
    public class Heart{ //成员内部类
        public void beat(){
            System.out.println("内部类的方法");
            System.out.println("我叫:"+name);
        }
    }
    //外部类的成员变量
    private String name;
    public void methodBody(){
        System.out.println("外部类的方法");
        new Heart().beat();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}


//定义测试类
public class Demo01InnerClass {
    public static void main(String[] args) {
        Body body = new Body();
        //通过外部类的对象,调用外部类的方法,里面间接再使用内部类Heart
        body.methodBody();
        System.out.println("================");
        Body.Heart heart = new Body().new Heart();
        heart.beat();
    }
}


7.2 匿名内部类



是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名内部类了。

如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】

定义格式:

接口名称 对象名 = new 接口名称(){

//覆盖重写所有抽象方法

};

注意:

1、匿名内部类,在创建对象的时候,只能使用唯一一次。

如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类了

2、匿名对象,在【调用方法】的时候,只能调用唯一一次。

如果希望同一个对象,调用多次方法,那么必须给对象起名字。

3、匿名内部类是省略了【实现类/子类名称】,但是匿名对象省略了【对象名称】

强调:匿名内部类和匿名对象不是一回事!!!

代码示例:

//定义接口
public interface MyInterface {
    void method();//抽象方法
}


//定义实现类
public class Demomain {
    public static void main(String[] args) {
        //使用匿名内部类
        MyInterface obj = new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名内部类实现了方法");
            }
        };
        obj.method();
    }
}
相关文章
|
4天前
|
C#
初识继承和多态
初识继承和多态
10 0
|
4天前
面向对象编程:类、对象、继承与多态
面向对象编程:类、对象、继承与多态
5 0
|
7月前
|
编译器 程序员 C++
【C++】继承和多态
【C++】继承和多态
422 3
|
7月前
|
编译器 数据库 C语言
8.5 C++ 继承与多态
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
49 0
|
7月前
|
Java
1.8 封装、继承、多态
1.8 封装、继承、多态
24 1
|
11月前
|
Java
类的继承多态
类的继承多态
51 0
|
Java 编译器 程序员
继承和多态
继承和多态
总结继承和多态的一些问题
本人学习了多态和继承后的一些问题,解答出来并总结,有些是容易搞混的概念。
总结继承和多态的一些问题
|
设计模式 Java 数据安全/隐私保护
【封装、继承、多态】总结
【封装、继承、多态】总结
78 0
继承与多态(1)
继承与多态(1)
继承与多态(1)