Java基础知识总结-面向对象概念

1. 什么是对象?

    对象是实际存在的任何东西。

    语法:Classname objname = new Classname();
    示例:Person p = new Person();

2. 为什么Java不支持多继承?

    首先会产生歧义问题,比如类A有个方法foo(),并有两个子类B和C有自己的foo()实现,现在假如有类D继承B和C,当D调用foo()方法时,编译器则不能确定哪个foo()方法会被调用。

        A foo()
        /         \
    B foo()  C foo()
        \         /
        D foo() 

    其次多继承会造成设计、创建的复杂性,比如强制转换、构造器链等。

    另外有了多继承也不会带来太多的好处,所以为简化目的,不要多继承,也许是明智的决定。

3. 给出this关键字的示例。    

class Square {
    int height;
    int width;

    Square(int height, int width) {
        // 注意:参数名与实例变量名是相同的
        this.height = height;
        this.width = width;
    }
}
4. 封装是什么?请举例。

    封装是一个技术手段,设置属性为private,并提供public的方法来访问这些属性。

    如果一个属性设置为private,则被隐藏在类中,不能在类之外被访问,因此封装也可以叫做数据隐藏。

    封装的最大好处就是可以修改我们的代码实现,而不会影响其他人使用我们的代码,因此封装可以使我们的代码具有可维护性、扩展性和灵活性。

class Person {
    private int age;
    private String name;

    public void talk() {
        System.out.println("Hello I am " + name);
        System.out.println("my age is  " + age);
    }
}

5. 什么是方法重载(Overload)?请举例。

    方法重载意味着可以有2个或更多的方法名字相同,但方法签名不同。这些方法可能存在于同一个类中,也可能存在于父子关系类中。    

class Person {
    private String firstName;
    private String lastName;

    Person() {
        this.firstName = "";
        this.lastName = "";
    }

    Person(String firstName) {
        this.firstName = firstName;
        this.lastName = "";
    }

    Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
6. 定义static变量和static方法?

    static关键字主要是为了内存管理,我们可以在变量、方法、代码块和嵌套类上使用static。

    static变量:可以被所有对象使用,就好比员工的公司名,学生的学校名。static变量只在类加载时在类区域分配内存一次。

    static方法:static方法属于类而不属于对象。static方法可以被类直接调用而不需要创建对象。static方法可以访问static变量且可以改变static变量的值。

7. 什么是抽象?

    抽象就是隐藏内在实现细节,而只对外显示功能。

8. 接口和抽象类的区别?

    接口:接口是隐式抽象的,没有任何实现。接口中的变量默认是final的。接口中的成员默认是public的。接口通过implements关键字实现。接口只能扩展接口。一个类可以实现多个接口。接口是绝对抽象的,不能被实例化。

    抽象类:抽象类可以有实例方法,实现子类的默认行为。抽象类可以包含non-final变量。抽象类可以有一般的成员,比如private、protected等。抽象类通过extends关键字被扩展。抽象类可以扩展其它类和实现多个接口。抽象类不能被实例化,但可以通过main()方法启动。

9. public和private区别?

    public:public方法和构造器可以被任何Java程序调用,无论是否在同一个包中。

    private:不能用于类(可用于内部类)和接口。不能用于接口中的属性和方法。private变量、方法和构造器不能被当前类之外的代码访问。

10. 什么是super关键字?

    super是一个引用变量,用于引用直接父类对象。当你创建一个子类对象时,一个父类对象会隐式实例化,可以通过super来引用。

    super可以引用直接父类的变量,super()用于调用直接父类的构造器,super可以调用直接父类的方法。

11. Java中的访问修饰符有什么?

    private、protected、default、public

12. 本地变量?

    本地变量是指方法中声明的变量,且只能在这个方法中使用的变量。    

public class HelloApp {
    public static void main(String[] args) {
        String helloMessage; // 本地变量
        helloMessage = "Hello, World!";
        System.out.println(helloMessage);
    }
}
13. protected和default有什么区别?

    protected:protected不能用于类(可用于内部类)和接口,也不能用于接口中的属性和方法,protected属性、方法和构造器可以在同一个包中访问,只能被其它包中的子类访问。

    default:不用于接口中的属性和方法,default属性、方法和构造器只能在同一个包中被访问。

14. 什么是类?

    类是创建对象的模型,且实际中不存在。属性和方法类代码存储在JVM中。当需要使用类时,我们需要创建一个这个类的对象。

class Person {
    String name; // 属性
    int age;

    void talk() { // 方法
    }
}
15. 什么是继承?

    从一个类衍生出另一个类就叫做继承。被继承的类叫父类,继承的类叫子类。

16. 解释一下接口?

    接口只能有抽象方法和常量,一个类实现接口,需要实现接口中的方法。

public interface Playable {
    void play();
}
17. 继承的类型?

    多层继承、多继承、层次继承。

18. 什么是多态?

    多态给我们最大的扩展灵活性,定义同名的多个方法是多态。有两种多态,一种是编译时多态(重载-Overload),一种是运行时多态(重构-Override)。

19. 什么是实例变量?请举例。

    对象创建时实例变量会初始化给默认值。boolean默认值是false,数据字型是0,任何引用对象的变量默认值为null。

class Circle {
    // 实例变量
    double x;
    double y;
    double z;

    // 实例方法
    void scale(double a) {
        radius *= a;
    }
}
20. 方法定义。

    方法表示执行任务的代码语句组合,方法组成:方法头、方法体。

    语法:修饰符 返回类型 方法名(参数类型1 参数1,参数类型2 参数2,...)
    返回类型:方法返回的值的类型。

    方法体:方法做什么的代码语句集合。

    方法名:方法的名字,方法名和参数列表组成方法签名。

    参数:参数就像占位符,当方法调用时,需要给参数赋值。

public static int max(int num1, int num2) { // 方法头
    // 方法体
    int result;
    if (num1 > num2) {
        result = num1;
    } else {
        result = num2;
    }
    return result;
}
21. 什么是final方法?请举例。

    final方法:用final修饰,不能被覆盖(Override)。

    子类不能扩展父类的final方法。

22. 什么是默认构造器?请举例。

    没有参数的构造器是默认构造器。

    语法:class-name() {}

class Bike {
    Bike() {
        System.out.println("bike is created.");
    }
    public static void main(String[] args) {
        Bike b = new Bike();
    }
}
23. 抽象方法定义?

    抽象方法是指需要在子类中实现的方法。抽象方法定义在父类中,但没有方法体。如果一个类包含抽象方法,那这个类必须是抽象类。

    抽象方法语法:

abstract class clsName {
    // 变量描述

    // 构造器

    // 抽象方法
    abstract rtype mthName(params);
}
    clsName:类名,合法的java标识符。

    abstract:关键字,定义抽象方法。

    rtype:方法的返回类型。

    mthName:方法名,合法的java标识符。

24. 什么是final变量?请举例。

    final可用于变量、方法、类。

    final变量不能被修改。

25. 什么是参数化构造器?请举例。

    参数化构造器可以为不同的对象提供不同的值。    

class Student {
    int id;
    String name;
    Student(int i, String n) {
        id = i;
        name = n;
    }

    void display() {
        System.out.println(id + ", " + name);
    }

    public static void main(String[] args) {
        Student s1 = new Student(111, "abc");
        Student s2 = new Student(222, "xyz");
        s1.display();
        s2.display();
    }
}
26. this关键字的作用是什么?

    this关键字引用当前类实例,可调用当前类构造器,调用当前类方法。

    语法:this.varName

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值