Java基础 -- Java和C++的区别应用程序和小程序字符型常量和字符串常量重载和重写 Java 面向对象编程三大特性(this和super关键字)

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础 -- Java和C++的区别应用程序和小程序字符型常量和字符串常量重载和重写 Java 面向对象编程三大特性(this和super关键字)相关的知识,希望对你有一定的参考价值。

1. Java和C++的区别

  • 都是面向对象的语言,都支持封装、继承和多态
  • Java 不提供指针来直接访问内存,程序内存更加安全
  • Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
  • Java 有自动内存管理机制,不需要程序员手动释放无用内存。C++需要手动释放内存。

2. 应用程序和小程序

2.1 什么是 Java 程序的主类 应用程序和小程序的主类有何不同?

  • 一个程序中可以有多个类,但只能有一个类是主类。
  • 在 Java 应用程序中,这个主类是指包含 main()方法的类。而在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。
  • 应用程序的主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。
  • 主类是 Java 程序执行的入口点。
  • 一个Java文件最多可以有一个public修饰的类,且被修饰的类和Java文件同名

2.2 Java 应用程序与小程序之间有哪些差别?

简单说应用程序是从主线程启动(也就是 main() 方法)。applet 小程序没有 main() 方法,主要是嵌在浏览器页面上运行(调用init()或者run()来启动),嵌入浏览器这点跟 flash 的小游戏类似。


3. 字符型常量和字符串常量的区别?

  • 形式上:字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符
  • 含义上:字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)
  • 占内存大小:字符常量只占2个字节; 字符串常量占若干个字节(至少一个字符结束标志) (注意: char在Java中占两个字节)

4. 重载和重写


4.1 重载

发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。

类中有多个方法,有着相同的方法名,但是方法的参数各不相同,这种情况被称为方法的重载。方法的重载可以提供方法调用的灵活性。

思考:HelloWorld中的System.out.println()方法,为什么可以把不同类型的参数传给这个方法?

【演示:查看println方法的重载】

方法重载必须满足以下条件

  1. 方法名必须相同
  2. 参数列表必须不同(参数的类型、个数、顺序的不同)
  3. 方法的返回值可以不同,也可以相同。

4.2 重写

发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。


5. 构造器 Constructor 是否可被 override

父类的私有属性和构造方法并不能被继承,所以 Constructor 也就不能被 override(重写),但是可以 overload(重载),所以你可以看到一个类中有多个构造函数的情况。


6. Java 面向对象编程三大特性

6.1 封装

程序设计追求的是高内聚,低耦合。高内聚:类的内部数据操作细节自己完成,不允许外部干涉。 低耦合: 仅仅暴露少量的方法给外部使用。

高内聚,低耦合
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

封装(数据的隐藏): 通常,应该禁止直接访问一个对象中数据的直接表示,而应该通过操作接口来访问,这称为信息隐藏。
封装的优点:

  • 提高程序的安全性,保护数据。
  • 隐藏代码的实现细节。
  • 统一接口。
  • 系统的可维护性增强了。

记住: 属性私有,添加访问器和get()和 set()。

示例:

package BasicGrammar;

public class People 
    //    属性私有
    private String name;

    //    get访问器
    public String getName() 
        return name;
    

    //     set访问器
    public void setName(String name) 
        this.name = name;
    

6.2 继承

  • 继承的本质是堆某一批类的抽象,从而实现对现实世界更好的建模。
  • extends的意思是“扩展”。子类是父类的扩展。
  • java里面只有单继承,没有多继承。
  • 在java里面所有的类,都会直接或者间接的继承Object类。
  • 私有的东西无法被继承。

示例:
Person.java

package BasicGrammar;

public class People 
    public void sayHi() 
        System.out.println("Hi.");
    

Student.java

package BasicGrammar;

public class Student extends People 
    public static void main(String[] args) 
        Student student = new Student();
        student.sayHi();
    

运行结果:

查看Student类的继承关系:


6.3 this和super关键字

如果有了有参的构造方法,而无参构造方法又没有显示的写出来,那么会默认为没有无参构造方法。
super

  • 子类的构造方法都会默认调用父类的无参构造方法,并且这是必须的。如果父类没有无参构造方法,那么子类的构造方法会报错。
  • super调用父类的构造方法,必须在构造方法的第一个。
  • super只能出现在子类的方法和构造方法中。
  • super和this不能同时调用构造方法。

与this相比

  • 代表的对象不同:this:本身调用者这个对象、super:代表父类对象
  • 前提:this:没有继承也可以使用、super:只有在继承条件下才可以使用。
  • 构造方法:this():本类的构造、super():父类的构造。

示例:
People.java

package BasicGrammar;

public class People 
    private String name = "Jack";

    public String getName() 
        return name;
    

Student.java

package BasicGrammar;

public class Student extends People 
    private String name;

    public Student(String name) 
        this.name = name;
    

    public void sayPeopleName() 
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.getName());
    

TestExtends.java

package BasicGrammar;

public class TestExtends 
    public static void main(String[] args) 
        Student ironMan = new Student("IronMan");
        ironMan.sayPeopleName();
    

运行结果:


6.4 方法的重写

重写是方法的重写和属性无关

子类重写了父类的方法,那么将执行子类的方法。
注意点:

  • 重写需要有继承关系,子类重写父类的方法。
  • 方法名必须相同
  • 参数列表必须相同
  • 修饰符:范围可以扩大但不能缩小:public > protected > default > private
  • 抛出异常的范围:可以缩小但不能扩大
  • 父类的构造函数是不能被子类继承的,因此不能在子类中重写。

示例:
B.java

package BasicGrammar;

public class B 
    public void sayHi() 
        System.out.println("Hi~~B");
    

A.java

package BasicGrammar;

public class A extends B 
    @Override
    public void sayHi() 
        System.out.println("Hi~~A");
    

TestExtends.java

package BasicGrammar;

public class TestExtends 
    public static void main(String[] args) 
        A a = new A();
        a.sayHi();
    

运行结果:


6.5 多态

即同一方法可以根据发送对象的不同采取多种不同的行为方式。

一个对象的实际类型是可以确定的,但可以指定对象的引用类型有很多。

多态的注意事项:

  • 多态是方法的多态,与属性无关。
  • 在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。

不可以重写的方法:

  • 1:static方法,它属于类,不属于实例。
  • 2 :final关键字修饰的方法,被final关键字修饰的类不可以被继承。
  • 3:private关键字修饰的方法。
  • 4:父类的构造方法。

示例:
TestExtends.java

package BasicGrammar;

public class TestExtends 
    public static void main(String[] args) 
        A a = new A();
        B b = new A();
        a.sayHi();
        b.sayHi();
    


6.6 小结

封装:

封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

继承:

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。

说明:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。(重写 @Override)。

多态:

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。



以上是关于Java基础 -- Java和C++的区别应用程序和小程序字符型常量和字符串常量重载和重写 Java 面向对象编程三大特性(this和super关键字)的主要内容,如果未能解决你的问题,请参考以下文章

C++和JAVA的区别是啥?

C++和JAVA的区别是啥?

[转] Java 基础

C++ java 和 C# 的区别

Java 和 C++ 在对象创建方面的主要区别是啥?

Java和c语言的区别