Skip to main content

Command Palette

Search for a command to run...

java itv1

Published
19 min readView as Markdown

Variable Argument Passing

  1. Câu hỏi: Variable Argument (varargs) là gì trong Java và làm thế nào để khai báo nó trong một phương thức?

    • Trả lời: Variable Argument là một tính năng cho phép bạn truyền một số lượng tham số không xác định đến một phương thức. Để khai báo varargs, bạn sử dụng dấu ba chấm (...) sau kiểu dữ liệu của tham số cuối cùng trong danh sách tham số của phương thức.
  2. Câu hỏi: Có giới hạn gì khi sử dụng varargs trong phương thức không?

    • Trả lời: Varargs phải là tham số cuối cùng trong danh sách tham số của phương thức và chỉ có thể có một tham số varargs trong một phương thức.
  3. Câu hỏi: Hãy viết một phương thức sử dụng varargs để tính tổng các số nguyên.

    • Trả lời:

        public int sum(int... numbers) {
            int total = 0;
            for (int number : numbers) {
                total += number;
            }
            return total;
        }
      
  4. Câu hỏi: Varargs có thể sử dụng với kiểu dữ liệu nguyên thủy (primitive) không? Hãy cho ví dụ.

    • Trả lời: Có, varargs có thể sử dụng với kiểu dữ liệu nguyên thủy. Ví dụ:

        public void printNumbers(int... numbers) {
            for (int number : numbers) {
                System.out.println(number);
            }
        }
      
  5. Câu hỏi: Sự khác biệt giữa việc truyền một mảng và sử dụng varargs là gì?

    • Trả lời: Varargs cho phép truyền một số lượng tham số không xác định một cách tiện lợi hơn, trong khi truyền một mảng yêu cầu bạn phải tạo và truyền một mảng tường minh. Varargs sẽ tự động tạo mảng từ các tham số được truyền vào.

Pass by Value

  1. Câu hỏi: Java có sử dụng pass by value hay pass by reference để truyền tham số cho phương thức?

    • Trả lời: Java luôn sử dụng pass by value. Điều này có nghĩa là giá trị của các biến được sao chép vào các tham số của phương thức.
  2. Câu hỏi: Khi truyền một đối tượng vào phương thức, điều gì thực sự được truyền?

    • Trả lời: Khi truyền một đối tượng, giá trị tham chiếu đến đối tượng đó được truyền. Tuy nhiên, tham chiếu này cũng được truyền theo cách pass by value.
  3. Câu hỏi: Hãy giải thích tại sao việc thay đổi tham chiếu trong phương thức không ảnh hưởng đến đối tượng gốc?

    • Trả lời: Vì tham chiếu được truyền theo cách pass by value, bất kỳ thay đổi nào đối với tham chiếu trong phương thức sẽ chỉ ảnh hưởng đến bản sao của tham chiếu đó, không ảnh hưởng đến tham chiếu gốc.
  4. Câu hỏi: Điều gì xảy ra khi bạn thay đổi trạng thái của đối tượng được truyền vào phương thức?

    • Trả lời: Nếu bạn thay đổi trạng thái của đối tượng được truyền vào phương thức, những thay đổi này sẽ ảnh hưởng đến đối tượng gốc, vì cả tham chiếu trong phương thức và tham chiếu gốc đều trỏ đến cùng một đối tượng.
  5. Câu hỏi: Hãy viết một ví dụ minh họa pass by value với một biến kiểu nguyên thủy và một đối tượng.

    • Trả lời:

        public class TestPassByValue {
            public static void main(String[] args) {
                int a = 5;
                modifyPrimitive(a);
                System.out.println("Value of a after modifyPrimitive: " + a); // Output: 5
      
                MyObject obj = new MyObject();
                obj.value = 10;
                modifyObject(obj);
                System.out.println("Value of obj.value after modifyObject: " + obj.value); // Output: 20
            }
      
            public static void modifyPrimitive(int num) {
                num = 10;
            }
      
            public static void modifyObject(MyObject obj) {
                obj.value = 20;
            }
        }
      
        class MyObject {
            int value;
        }
      

Pass by Reference

  1. Câu hỏi: Java có hỗ trợ pass by reference không? Hãy giải thích.

    • Trả lời: Java không hỗ trợ pass by reference. Tất cả tham số trong Java đều được truyền theo cách pass by value.
  2. Câu hỏi: Sự khác biệt giữa pass by value và pass by reference là gì?

    • Trả lời: Pass by value truyền bản sao của giá trị, trong khi pass by reference truyền bản sao của tham chiếu đến đối tượng.
  3. Câu hỏi: Hãy mô tả cách Java mô phỏng hành vi giống như pass by reference.

    • Trả lời: Java mô phỏng hành vi giống như pass by reference bằng cách truyền giá trị của tham chiếu đến đối tượng. Mặc dù bản thân tham chiếu được truyền theo cách pass by value, nhưng nó cho phép phương thức thay đổi trạng thái của đối tượng mà tham chiếu đó trỏ tới.
  4. Câu hỏi: Điều gì xảy ra nếu bạn thay đổi giá trị của tham chiếu trong phương thức trong ngữ cảnh pass by value?

    • Trả lời: Thay đổi giá trị của tham chiếu trong phương thức sẽ không ảnh hưởng đến tham chiếu gốc, vì chỉ bản sao của tham chiếu đó bị thay đổi.
  5. Câu hỏi: Hãy viết một phương thức minh họa sự khác biệt giữa pass by value và pass by reference trong Java.

    • Trả lời:

        public class PassByValueExample {
            public static void main(String[] args) {
                int x = 10;
                changePrimitive(x);
                System.out.println("After changePrimitive, x: " + x); // Output: 10
      
                MyObject obj = new MyObject();
                obj.value = 30;
                changeObject(obj);
                System.out.println("After changeObject, obj.value: " + obj.value); // Output: 40
            }
      
            public static void changePrimitive(int value) {
                value = 20;
            }
      
            public static void changeObject(MyObject object) {
                object.value = 40;
            }
        }
      
        class MyObject {
            int value;
        }
      

Method Overloading

  1. Câu hỏi: Method Overloading là gì và tại sao nó quan trọng?

    • Trả lời: Method Overloading là kỹ thuật cho phép định nghĩa nhiều phương thức cùng tên nhưng khác nhau về tham số (số lượng, kiểu hoặc thứ tự) trong cùng một lớp. Nó quan trọng vì nó giúp tăng tính linh hoạt và dễ đọc của mã nguồn.
  2. Câu hỏi: Bạn có thể overload một phương thức bằng cách thay đổi kiểu trả về của nó không?

    • Trả lời: Không, bạn không thể overload một phương thức chỉ bằng cách thay đổi kiểu trả về của nó. Các phương thức overload phải khác nhau về danh sách tham số.
  3. Câu hỏi: Hãy cho một ví dụ về method overloading với các phương thức có số lượng tham số khác nhau.

    • Trả lời:

        public class OverloadingExample {
            public void print() {
                System.out.println("No parameters");
            }
      
            public void print(String s) {
                System.out.println("String parameter: " + s);
            }
      
            public void print(int i, int j) {
                System.out.println("Two int parameters: " + i + ", " + j);
            }
        }
      
  4. Câu hỏi: Sự khác biệt giữa method overloading và method overriding là gì?

    • Trả lời: Method overloading là định nghĩa nhiều phương thức cùng tên trong cùng một lớp với các tham số khác nhau. Method overriding là khi một lớp con cung cấp một triển khai cụ thể của phương thức đã được khai báo trong lớp cha hoặc interface.
  5. Câu hỏi: Có thể overload một phương thức static không? Hãy cho ví dụ.

    • Trả lời: Có, bạn có thể overload một phương thức static. Ví dụ:

        public class StaticOverloading {
            public static void print(String s) {
                System.out.println("Static method with String: " + s);
            }
      
            public static void print(int i) {
                System.out.println("Static method with int: " + i);
            }
        }
      

Accessibility

  1. Câu hỏi: Các mức độ truy cập (access modifiers) trong Java là gì? Hãy mô tả từng mức độ.

    • Trả lời: Các mức độ truy cập trong Java gồm:

      • private: Chỉ có thể truy cập trong cùng một lớp.

      • default (package-private): Có thể truy cập trong cùng một gói.

      • protected: Có thể truy cập trong cùng một gói và bởi các lớp con.

      • public: Có thể truy cập từ mọi nơi.

  2. Câu hỏi: Sự khác biệt giữa các mức độ truy cập private, protected, và public là gì?

    • Trả lời:

      • private: Truy cập chỉ trong lớp khai báo.

      • protected: Truy cập trong cùng gói và bởi các lớp con.

      • public: Truy cập từ bất kỳ đâu.

  3. Câu hỏi: Các lớp có thể có mức độ truy cập protected không?

    • Trả lời: Không, các lớp chỉ có thể có mức độ truy cập public hoặc default.

The Object Class

  1. Câu hỏi: Class Object là gì và tại sao nó quan trọng trong Java?

    • Trả lời: Object là lớp cha của tất cả các lớp trong Java. Nó cung cấp các phương thức cơ bản như toString(), equals(), hashCode(), và clone().
  2. Câu hỏi: Hãy giải thích và cho ví dụ về phương thức toString() trong lớp Object.

    • Trả lời: Phương thức toString() trả về chuỗi mô tả đối tượng. Ví dụ:

        public class MyClass {
            @Override
            public String toString() {
                return "MyClass instance";
            }
        }
      
  3. Câu hỏi: Phương thức equals() trong lớp Object làm gì? Làm thế nào để override nó?

    • Trả lời: equals() so sánh các đối tượng. Override:

        @Override
        public boolean equals(Object obj) {
            if (this == obj) return true;
            if (obj == null || getClass() != obj.getClass()) return false;
            MyClass myClass = (MyClass) obj;
            return Objects.equals(field, myClass.field);
        }
      

Constructors

  1. Câu hỏi: Constructor là gì và tại sao chúng quan trọng?

    • Trả lời: Constructor là phương thức đặc biệt được gọi khi tạo đối tượng. Nó khởi tạo đối tượng.
  2. Câu hỏi: Sự khác biệt giữa constructor và phương thức là gì?

    • Trả lời: Constructor không có kiểu trả về và tên trùng với tên lớp. Phương thức có kiểu trả về và tên có thể khác.
  3. Câu hỏi: Hãy giải thích constructor mặc định (default constructor).

    • Trả lời: Constructor mặc định là constructor không có tham số. Nếu không có constructor nào được khai báo, Java tự động tạo một constructor mặc định.
  4. Câu hỏi: Có thể overload constructors không? Hãy cho ví dụ.

    • Trả lời: Có, có thể overload constructors. Ví dụ:

        public class MyClass {
            public MyClass() {
                // Constructor mặc định
            }
            public MyClass(String name) {
                // Constructor với tham số
            }
        }
      

Initialization

  1. Câu hỏi: Các cách khác nhau để khởi tạo biến trong Java là gì?

    • Trả lời: Khởi tạo trực tiếp, sử dụng constructors, khối khởi tạo, và phương thức khởi tạo.
  2. Câu hỏi: Khối khởi tạo (initialization block) là gì? Hãy cho ví dụ.

    • Trả lời: Khối khởi tạo là đoạn mã được thực thi khi đối tượng được tạo. Ví dụ:

        public class MyClass {
            {
                // Khối khởi tạo
                System.out.println("Initialization block");
            }
        }
      

Classes

  1. Câu hỏi: Class trong Java là gì và nó có những thành phần nào?

    • Trả lời: Class là mẫu hình cho các đối tượng. Nó có thành phần: thuộc tính (fields), phương thức (methods), constructors, khối khởi tạo, và nested classes.
  2. Câu hỏi: Sự khác biệt giữa lớp và đối tượng là gì?

    • Trả lời: Lớp là mẫu hình, đối tượng là thể hiện của lớp.

Nested Classes

  1. Câu hỏi: Nested Class là gì và có những loại nào?

    • Trả lời: Nested Class là lớp được định nghĩa bên trong lớp khác. Có hai loại: Static Nested Class và Inner Class.
  2. Câu hỏi: Sự khác biệt giữa Static Nested Class và Inner Class là gì?

    • Trả lời: Static Nested Class không truy cập được các thành phần không static của lớp ngoài. Inner Class có thể truy cập các thành phần của lớp ngoài.
  3. Câu hỏi: Hãy cho ví dụ về Static Nested Class.

    • Trả lời:

        public class OuterClass {
            static class StaticNestedClass {
                void display() {
                    System.out.println("Static Nested Class");
                }
            }
        }
      

Anonymous and Local Classes

  1. Câu hỏi: Anonymous Class là gì và khi nào nên sử dụng nó?

    • Trả lời: Anonymous Class là lớp không tên, thường được sử dụng cho các triển khai ngắn gọn của interface hoặc lớp trừu tượng.
  2. Câu hỏi: Hãy viết một ví dụ về Anonymous Class.

    • Trả lời:

        Button button = new Button();
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("Button clicked");
            }
        });
      
  3. Câu hỏi: Local Class là gì? Hãy cho ví dụ.

    • Trả lời: Local Class là lớp được định nghĩa bên trong phương thức hoặc khối. Ví dụ:

        public void myMethod() {
            class LocalClass {
                void display() {
                    System.out.println("Local Class");
                }
            }
            LocalClass local = new LocalClass();
            local.display();
        }
      

Abstract Classes

  1. Câu hỏi: Abstract Class là gì và tại sao chúng được sử dụng?

    • Trả lời: Abstract Class là lớp không thể tạo đối tượng, chỉ có thể kế thừa. Nó chứa các phương thức trừu tượng cần được triển khai bởi lớp con.
  2. Câu hỏi: Sự khác biệt giữa Abstract Class và Interface là gì?

    • Trả lời: Abstract Class có thể có phương thức đã triển khai, Interface chỉ có phương thức trừu tượng (trước Java 8). Một lớp có thể kế thừa một Abstract Class nhưng có thể thực hiện nhiều Interface.
  3. Câu hỏi: Hãy cho ví dụ về Abstract Class với một phương thức trừu tượng và một phương thức đã triển khai.

    • Trả lời:

        public abstract class Animal {
            public abstract void makeSound();
            public void sleep() {
                System.out.println("Sleeping");
            }
        }
      

Final Class

  1. Câu hỏi: Final Class là gì và tại sao sử dụng nó?

    • Trả lời: Final Class là lớp không thể kế thừa. Nó được sử dụng để ngăn chặn việc mở rộng lớp.
  2. Câu hỏi: Hãy cho ví dụ về một Final Class.

    • Trả lời:

        public final class ImmutableClass {
            private final int value;
            public ImmutableClass(int value) {
                this.value = value;
            }
            public int getValue() {
                return value;
            }
        }
      

Super Keyword

  1. Câu hỏi: super keyword là gì và khi nào sử dụng nó?

    • Trả lời: super dùng để tham chiếu đến lớp cha của đối tượng hiện tại, có thể được sử dụng để gọi phương thức hoặc constructor của lớp cha.
  2. Câu hỏi: Hãy viết một ví dụ sử dụng super để gọi constructor của lớp cha.

    • Trả lời:

        public class Parent {
            public Parent(String name) {
                System.out.println("Parent constructor: " + name);
            }
        }
        public class Child extends Parent {
            public Child(String name) {
                super(name);
                System.out.println("Child constructor: " + name);
            }
        }
      

Finalize

  1. Câu hỏi: `finalize

method là gì và khi nào nó được gọi? - **Trả lời**:finalize` là phương thức được gọi bởi Garbage Collector trước khi đối tượng bị thu hồi bộ nhớ. Nó cho phép thực hiện dọn dẹp tài nguyên.

  1. Câu hỏi: Tại sao finalize method không nên được sử dụng một cách thường xuyên?

    • Trả lời: finalize không đảm bảo sẽ được gọi và có thể gây ra vấn đề hiệu suất và rò rỉ bộ nhớ. Sử dụng các cơ chế quản lý tài nguyên khác như try-with-resources hoặc finally block.
  2. Câu hỏi: Hãy viết một ví dụ về finalize method.

    • Trả lời:

        public class MyClass {
            @Override
            protected void finalize() throws Throwable {
                try {
                    System.out.println("Finalize method called");
                } finally {
                    super.finalize();
                }
            }
        }
      

Dưới đây là 20 câu hỏi phỏng vấn Java tập trung vào các chủ đề Interfaces, Inheritance, Multiple Inheritance, và Inheritance Gotchas.

Interfaces

  1. Câu hỏi: Interface là gì và tại sao chúng được sử dụng trong Java?

    • Trả lời: Interface là một tập hợp các phương thức trừu tượng và hằng số (từ Java 8, có thể có các phương thức default và static). Chúng được sử dụng để định nghĩa các phương thức mà các lớp thực hiện phải cung cấp, giúp đảm bảo tính tương thích và khả năng mở rộng.
  2. Câu hỏi: Sự khác biệt giữa Abstract Class và Interface là gì?

    • Trả lời: Abstract Class có thể có các phương thức đã triển khai, Interface trước Java 8 chỉ có các phương thức trừu tượng. Một lớp có thể kế thừa một Abstract Class nhưng có thể thực hiện nhiều Interface.
  3. Câu hỏi: Bạn có thể khai báo một phương thức static trong Interface không? Hãy giải thích.

    • Trả lời: Có, từ Java 8, Interface có thể có các phương thức static và default. Các phương thức static trong Interface có thể được gọi mà không cần đối tượng thực hiện.
  4. Câu hỏi: Hãy cho ví dụ về một Interface với phương thức default.

    • Trả lời:

        public interface MyInterface {
            default void defaultMethod() {
                System.out.println("Default method in interface");
            }
        }
      
  5. Câu hỏi: Làm thế nào để một lớp triển khai một Interface? Hãy cho ví dụ.

    • Trả lời:

        public interface MyInterface {
            void myMethod();
        }
      
        public class MyClass implements MyInterface {
            @Override
            public void myMethod() {
                System.out.println("Method implementation");
            }
        }
      
  6. Câu hỏi: Interface có thể chứa các biến không? Nếu có, chúng có những đặc điểm gì?

    • Trả lời: Có, các biến trong Interface mặc định là public, static, và final.
  7. Câu hỏi: Bạn có thể khai báo một Interface bên trong một Interface khác không?

    • Trả lời: Có, một Interface có thể chứa một Interface khác. Interface bên trong sẽ mặc định là publicstatic.

Inheritance

  1. Câu hỏi: Inheritance là gì và tại sao nó quan trọng trong lập trình hướng đối tượng?

    • Trả lời: Inheritance là cơ chế cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác. Nó giúp tái sử dụng mã nguồn và tạo ra mối quan hệ phân cấp giữa các lớp.
  2. Câu hỏi: Làm thế nào để một lớp kế thừa từ một lớp khác trong Java? Hãy cho ví dụ.

    • Trả lời:

        public class ParentClass {
            public void display() {
                System.out.println("Parent class method");
            }
        }
      
        public class ChildClass extends ParentClass {
            public void show() {
                System.out.println("Child class method");
            }
        }
      
  3. Câu hỏi: Sự khác biệt giữa extendsimplements trong Java là gì?

    • Trả lời: extends được sử dụng để kế thừa từ một lớp khác, implements được sử dụng để thực hiện các phương thức của một Interface.
  4. Câu hỏi: Từ khóa super có vai trò gì trong Inheritance?

    • Trả lời: super được sử dụng để tham chiếu đến lớp cha của đối tượng hiện tại. Nó có thể gọi phương thức hoặc constructor của lớp cha.
  5. Câu hỏi: Hãy giải thích khái niệm overriding và cho ví dụ.

    • Trả lời: Overriding là khi lớp con cung cấp triển khai riêng cho một phương thức đã được định nghĩa trong lớp cha. Ví dụ:

        public class Parent {
            public void display() {
                System.out.println("Parent display");
            }
        }
      
        public class Child extends Parent {
            @Override
            public void display() {
                System.out.println("Child display");
            }
        }
      
  6. Câu hỏi: Có thể sử dụng super để gọi phương thức overridden của lớp cha không? Hãy cho ví dụ.

    • Trả lời: Có, bạn có thể sử dụng super để gọi phương thức overridden. Ví dụ:

        public class Parent {
            public void display() {
                System.out.println("Parent display");
            }
        }
      
        public class Child extends Parent {
            @Override
            public void display() {
                super.display();
                System.out.println("Child display");
            }
        }
      

Multiple Inheritance

  1. Câu hỏi: Java có hỗ trợ multiple inheritance thông qua các lớp không? Giải thích.

    • Trả lời: Không, Java không hỗ trợ multiple inheritance thông qua các lớp để tránh vấn đề diamond problem. Tuy nhiên, Java hỗ trợ multiple inheritance thông qua các Interface.
  2. Câu hỏi: Làm thế nào để một lớp thực hiện nhiều Interface trong Java? Hãy cho ví dụ.

    • Trả lời:

        public interface InterfaceA {
            void methodA();
        }
      
        public interface InterfaceB {
            void methodB();
        }
      
        public class MyClass implements InterfaceA, InterfaceB {
            @Override
            public void methodA() {
                System.out.println("Method A");
            }
      
            @Override
            public void methodB() {
                System.out.println("Method B");
            }
        }
      
  3. Câu hỏi: Điều gì xảy ra nếu hai Interface có phương thức trùng tên mà một lớp thực hiện cả hai Interface đó?

    • Trả lời: Lớp thực hiện cả hai Interface phải override phương thức trùng tên và cung cấp triển khai cho nó.
  4. Câu hỏi: Hãy giải thích vấn đề "diamond problem" và cách Java giải quyết nó.

    • Trả lời: Diamond problem xảy ra khi một lớp có nhiều lớp cha có cùng một phương thức. Java giải quyết bằng cách không cho phép multiple inheritance thông qua các lớp và sử dụng Interface để thực hiện các phương thức trùng tên.
  5. Câu hỏi: Interface có thể kế thừa từ một hoặc nhiều Interface khác không? Hãy cho ví dụ.

    • Trả lời: Có, Interface có thể kế thừa từ một hoặc nhiều Interface khác. Ví dụ:

        public interface InterfaceA {
            void methodA();
        }
      
        public interface InterfaceB {
            void methodB();
        }
      
        public interface InterfaceC extends InterfaceA, InterfaceB {
            void methodC();
        }
      

Inheritance Gotchas

  1. Câu hỏi: Sự khác biệt giữa final class và final method là gì?

    • Trả lời: final class không thể bị kế thừa, trong khi final method không thể bị override bởi các lớp con.
  2. Câu hỏi: Lớp final có thể kế thừa lớp khác không?

    • Trả lời: Có, lớp final có thể kế thừa lớp khác nhưng không thể bị kế thừa.
  3. Câu hỏi: Có thể gọi constructor của lớp cha trong lớp con bằng this không?

    • Trả lời: Không, this được sử dụng để gọi constructor khác trong cùng một lớp. Để gọi constructor của lớp cha, bạn phải sử dụng super.
  4. Câu hỏi: Điều gì xảy ra nếu lớp con không gọi constructor của lớp cha một cách tường minh?

    • Trả lời: Constructor mặc định của lớp cha sẽ được gọi nếu lớp con không gọi constructor của lớp cha một cách tường minh.
  5. Câu hỏi: Bạn có thể kế thừa một lớp mà không override bất kỳ phương thức nào không?

    • Trả lời: Có, bạn có thể kế thừa một lớp mà không override bất kỳ phương thức nào. Trong trường hợp này, lớp con sẽ sử dụng các phương thức được thừa kế từ lớp cha.
  6. Câu hỏi: Điều gì xảy ra nếu một lớp con có cùng tên biến với lớp cha?

    • Trả lời: Biến của lớp con sẽ che khuất biến của lớp cha. Bạn có thể truy cập biến của lớp cha bằng cách sử dụng super.variableName.
  7. Câu hỏi: Có thể sử dụng từ khóa super trong constructor của lớp con để gọi phương thức của lớp cha không?

    • Trả lời: Không, bạn không thể sử dụng super trong constructor để gọi phương thức của lớp cha. super trong constructor chỉ có thể được sử dụng để gọi constructor của lớp cha.
  8. Câu hỏi: Bạn có thể sử dụng từ khóa superthis trong cùng một constructor không?

    • Trả lời: Không, bạn không thể sử dụng superthis trong cùng một constructor, vì chúng phải là câu lệnh đầu tiên trong constructor.
  9. Câu hỏi: Có thể tạo một

đối tượng của Abstract Class không? Giải thích. - Trả lời: Không, bạn không thể tạo một đối tượng của Abstract Class. Abstract Class chỉ có thể được kế thừa bởi lớp khác và các phương thức trừu tượng của nó phải được triển khai bởi lớp con.

  1. Câu hỏi: Constructor của lớp cha có thể là private không? Nếu có, điều này ảnh hưởng đến việc kế thừa như thế nào?

    • Trả lời: Có, constructor của lớp cha có thể là private, nhưng điều này sẽ ngăn chặn lớp con kế thừa constructor đó và lớp con không thể tạo đối tượng của lớp cha.
  2. Câu hỏi: Hãy giải thích tầm quan trọng của từ khóa instanceof trong ngữ cảnh inheritance.

    • Trả lời: Từ khóa instanceof được sử dụng để kiểm tra xem một đối tượng có phải là một thể hiện của một lớp hoặc interface cụ thể hay không. Nó hữu ích trong việc xác định kiểu đối tượng trong ngữ cảnh inheritance.
  3. Câu hỏi: Điều gì xảy ra nếu lớp con override một phương thức static từ lớp cha?

    • Trả lời: Phương thức static không thể override trong ngữ cảnh động (runtime). Nếu một lớp con có cùng tên và chữ ký phương thức static, nó sẽ che khuất phương thức static của lớp cha, và việc gọi phương thức sẽ phụ thuộc vào kiểu tham chiếu.

More from this blog

hoangkim

366 posts