Skip to content

Instantly share code, notes, and snippets.

@hnaoto
Last active March 7, 2019 18:29
Show Gist options
  • Save hnaoto/45fd15524334e34aa8d97aeaa76da07b to your computer and use it in GitHub Desktop.
Save hnaoto/45fd15524334e34aa8d97aeaa76da07b to your computer and use it in GitHub Desktop.

interface vs abstract class

  • An interface is a description of the behaviour an implementing class will have. The implementing class ensures, that it will have these methods that can be used on it. It is basically a contract or a promise the class has to make.

  • An abstract class is a basis for different subclasses that share behaviour which does not need to be repeatedly created. Subclasses must complete the behaviour and have the option to override predefined behaviour (as long as it is not defined as final or private).

Interface:
  • To define a contract ( preferably stateless - I mean no variables )
  • To link unrelated classes with has a capabilities.
  • To declare public constant variables (immutable state)
Abstract class:
  • Share code among several closely related classes. It establishes is a relation.

  • Share common state among related classes ( state can be modified in concrete classes)

https://stackoverflow.com/questions/18777989/how-should-i-have-explained-the-difference-between-an-interface-and-an-abstract

What is the main difference between Inheritance and Polymorphism?

  • Inheritance refers to using the structure and behavior of a super class in a subclass.
  • Polymorphism refers to changing the behavior of a super class in the subclass.

Inheritance is when a 'class' derives from an existing 'class'. So if you have a Person class, then you have a Student class that extends Person, Student inherits all the things that Person has. There are some details around the access modifiers you put on the fields/methods in Person, but that's the basic idea. For example, if you have a private field on Person, Student won't see it because its private, and private fields are not visible to subclasses.

Polymorphism deals with how the program decides which methods it should use, depending on what type of thing it has. If you have a Person, which has a read method, and you have a Student which extends Person, which has its own implementation of read, which method gets called is determined for you by the runtime, depending if you have a Person or a Student. It gets a bit tricky, but if you do something like

Person p = new Student();
p.read();

the read method on Student gets called. Thats the polymorphism in action. You can do that assignment because a Student is a Person, but the runtime is smart enough to know that the actual type of p is Student.

Note that details differ among languages. You can do inheritance in javascript for example, but its completely different than the way it works in Java.

https://stackoverflow.com/questions/6308178/what-is-the-main-difference-between-inheritance-and-polymorphism

static keyword

static members belong to the class instead of a specific instance.

It means that only one instance of a static field exists[1] even if you create a million instances of the class or you don't create any. It will be shared by all instances.

Since static methods also do not belong to a specific instance, they can't refer to instance members. In the example given, main does not know which instance of the Hello class (and therefore which instance of the Clock class) it should refer to. static members can only refer to static members. Instance members can, of course access static members.

Side note: Of course, static members can access instance members through an object reference.

Example:

public class Example {
    private static boolean staticField;
    private boolean instanceField;
    public static void main(String[] args) {
        // a static method can access static fields
        staticField = true;

        // a static method can access instance fields through an object reference
        Example instance = new Example();
        instance.instanceField = true;
    }
  • The static keyword means that something (a field, method or nested class) is related to the type rather than any particular instance of the type. So for example, one calls Math.sin(...) without any instance of the Math class, and indeed you can't create an instance of the Math class.

https://stackoverflow.com/questions/413898/what-does-the-static-keyword-do-in-a-class

class variable VS memebr varaible VS instance variable

Instance variables:

These variables belong to the instance of a class, thus an object. And every instance of that class (object) has it's own copy of that variable. Changes made to the variable don't reflect in other instances of that class.

Class variables:

These are also known as static member variables and there's only one copy of that variable that is shared with all instances of that class. If changes are made to that variable, all other instances will see the effect of the changes.

  • a member variable (sometimes called a member field) is a variable that is associated with a specific object, and accessible for all its methods (member functions). In class-based languages, these are distinguished into two types: if there is only one copy of the variable shared with all instances of the class, it is called a class variable or static member variable; while if each instance of the class has its own copy of the variable, the variable is called an instance variable

  • https://en.wikipedia.org/wiki/Class_variable

anonymous inner class

https://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java

An anonymous inner class can come useful when making an instance of an object with certain "extras" such as overriding methods, without having to actually subclass a class. don't need to make an extra class that implements ActionListener -- I can just instantiate an anonymous inner class without actually making a separate class.

synchronize vs concurrent

https://www.quora.com/What-is-the-difference-between-synchronize-and-concurrent-collection-in-Java

Factory method pattern

"Define an interface for creating an object, but let subclasses decide which class to instantiate. The Factory method lets a class defer instantiation it uses to subclasses." This type of design pattern comes under creational pattern as this pattern provides one of the best ways to create an object.

In Factory pattern, we create object without exposing the creation logic to the client and refer to newly created object using a common interface.

What is the benefit of Factory pattern? Factory pattern encapsulates the implementation details and underlying implementation can be changed without any impact on caller api.

strategy pattern

the strategy pattern (also known as the policy pattern) is a behavioral software design pattern that enables selecting an algorithm at runtime. Instead of implementing a single algorithm directly, code receives run-time instructions as to which in a family of algorithms to use.[1]

What is Singleton pattern?

Singleton pattern is one of the simplest design patterns in Java. This type of design pattern comes under creational pattern as this pattern provides one of the best ways to create an object.

This pattern involves a single class which is responsible to create an object while making sure that only single object gets created. This class provides a way to access its only object which can be accessed directly without need to instantiate the object of the class.

What are the difference between a static class and a singleton class?

Following are the differences between a static class and a singleton class.

A static class can not be a top level class and can not implement interfaces where a singleton class can.

All members of a static class are static but for a Singleton class it is not a requirement.

A static class get initialized when it is loaded so it can not be lazily loaded where a singleton class can be lazily loaded.

A static class object is stored in stack whereas singlton class object is stored in heap memory space.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment