We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面向对象编程主要是通过有以下几个知识点
public class Encapsulation { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public static void main(String[] args) { Encapsulation test = new Encapsulation(); test.setName("hcc"); System.out.println(test.getName()); } }
定义: 实现代码的复用,它可以创建分等级层次的类。
介绍:一般写代码的时候很难直接想到继承的关系,但是当写到两个类具有相同的特征(属性)和行为(方法)的时候,可以把他们相同的部分抽到一个类中作为父类,其他的两个类继承这个父类。继承后的子类就自动拥有父类的属性和方法
注意:
private
override
protected
super
this
// 父类 public class Animal { protected String species; protected String food; protected int age; public Animal(String species, int age, String food) { this.species = species; this.age = age; this.food = food; } public static void parentsName() { System.out.println("动物"); } public void eat() { System.out.println("吃:" + this.food); } } // 子类 public class Cat extends Animal { private String name; public Cat(String species, int age, String food) { super(species, age, food); super.parentsName(); } public void setName(String name){ this.name = name; } public String getName() { return name; } } // 使用 public class Main { public static void main(String[] args) { Cat cat = new Cat("猫科", 1, "鱼"); cat.eat(); cat.setName("薄荷"); System.out.println(cat.getName()); } }
定义:子类根据自己的需求,对父类的方法进行重写编写,重写后,子类无法直接访问父类被覆盖的方法,必须通过super关键词访问(super.方法()),但是父类的构造函数不能被重写
super.方法()
规则:
重写和重载的区别(over)
重载主要是同一个类的同名方法中,而重写发生在子类和父类的同名方法
abstract
定义: 对类的一个抽象,定义类比较通用的概念,用于拓展类
static
public
// 抽象类 public abstract class Base { public abstract String method1(); public abstract void method2(); } // 子类一(实现了抽象方法) public class sub1 extends Base{ @Override public String method1() { return "hcc"; } @Override public void method2() { System.out.println("实现抽象类的重写"); } public void selfMethods() { System.out.println("自己的方法"); } } // 子类二(继续是抽象类) public abstract class sub2 extends Base { public abstract void sub2(); }
interface
定义: 一系列抽象方法的集合(但是不需要使用abstract, 隐藏的public abstract),接口不是类,不能被实例化对象,只能通过类来实现(implements)它
public abstract
implements
static final
// interface public interface Car { void run(); String seat(); } // 实现 public class Benz implements Car{ @Override public void run() { System.out.println("速度很快"); } @Override public String seat() { return "4人座位、2人座位"; } }
区别:
举例:就像人这个物种,可以说它是一个动物,就是是一个大的抽象(抽象类),但是它具有运动,捕猎,学习的具体功能(接口)。再比如车,某汽车公司seo画饼说我司轿车是高端奢华型,面向上流社会,这是抽象类 ,汽车设计师说那就四驱,发动机这样,内饰这样,这是接口
多态:表示一个类型(父类或者接口或抽象类)的变量的方法的具体实现行为由变量指向的具体对象确定。
场景:现在要读取一个新闻文件,可以从文本,网络,标准输入,语言识别等
// 抽象类 NewsReader 只是定义读取,不管怎么读取 public abstract class NewsReader { public abstract News readNews(String path); // 具有这个功能,但是具体的功能实现,在子类中确定! } // 从网络中读取 返回News的实例 public class UrlNewsReader extends NewsReader { @Override public News readNews(String path) { return new News("从网络中读取", "test"); } } // 从文件中入读 public class FileNewsReader extends NewsReader { @Override public News readNews(String path) { return new News("从文件中读取", "test"); } } // 调用 public class Main { public static void main(String[] args) { News news = new News("第一条新闻", "hhhhhhhhhhhhhhh"); viewNews(news); News newsFromFile = read(new FileNewsReader(), "simple/res.txt"); News newsFromUrl = read(new UrlNewsReader(), "simple/res.txt"); } private static News read(NewsReader reader, String path) { return reader.readNews("res/output.txt"); } }
我们从上面的例子中看实际的形成条件
UrlNewsReader
FileNewsReader
readNews
Main.java
read
News
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Java面向对象
面向对象编程主要是通过有以下几个知识点
封装和继承
1. 封装
2. 继承
定义: 实现代码的复用,它可以创建分等级层次的类。
介绍:一般写代码的时候很难直接想到继承的关系,但是当写到两个类具有相同的特征(属性)和行为(方法)的时候,可以把他们相同的部分抽到一个类中作为父类,其他的两个类继承这个父类。继承后的子类就自动拥有父类的属性和方法
注意:
private
)override
)protected
修饰符,可以给子类访问,隐藏给其他类进行访问super
直接访问父类的属性和方法,this
指向自己的实例引用3. 重写(override)
定义:子类根据自己的需求,对父类的方法进行重写编写,重写后,子类无法直接访问父类被覆盖的方法,必须通过
super
关键词访问(super.方法()
),但是父类的构造函数不能被重写规则:
重写和重载的区别(over)
重载主要是同一个类的同名方法中,而重写发生在子类和父类的同名方法
抽象类(
abstract
)定义: 对类的一个抽象,定义类比较通用的概念,用于拓展类
规则:
static
方法不能被声明为抽象方法,只能用public
、protected
来修饰抽象方法(因为抽象方法没有方法体,是用来被继承的,所以不能使用private
修饰,static
可以通过类名直接访问,但是由于没有方法体,所以也没有意义)接口(
interface
)定义: 一系列抽象方法的集合(但是不需要使用
abstract
, 隐藏的public abstract
),接口不是类,不能被实例化对象,只能通过类来实现(implements
)它规则:
static final
)接口和抽象类的区别
区别:
举例:就像人这个物种,可以说它是一个动物,就是是一个大的抽象(抽象类),但是它具有运动,捕猎,学习的具体功能(接口)。再比如车,某汽车公司seo画饼说我司轿车是高端奢华型,面向上流社会,这是抽象类 ,汽车设计师说那就四驱,发动机这样,内饰这样,这是接口
多态
定义
多态:表示一个类型(父类或者接口或抽象类)的变量的方法的具体实现行为由变量指向的具体对象确定。
形成条件
实现方式
1. 继承和接口实现多态
我们从上面的例子中看实际的形成条件
UrlNewsReader
和文件中读取FileNewsReader
都继承了读取readNews
方法,并调用了重写的方法Main.java
中我们的read
统一处理了文件的读取,接受的是父类的引用,但是传递的确实子类的对象,所以返回了不同的News
,有了不同的行为多态的好处
The text was updated successfully, but these errors were encountered: