标签:java name 子类 day3 CLASS new 父类 方法 public
面向对象
类class
方法:比如main
调用方法:
方法分为静态方法 加static、非静态方法
静态方法可以直接类名。方法名调用
非静态时候只能实例化这个类
然后才能调用其中的非静态方法
Class class = new Class();
方法对方法调用的时候:
都是非静态或都是静态方法 可以调用
值传递
引用传递
类、对象
new关键字创建对象
类中构造器
快捷键 ALT+Insert 可以快速创建构造器
package kuangStudy.oop.Demo02;
public class Person {
String name;
//构造方法 没有返回值 与类名相同
public Person()//无参构造
{
this.name = "asdf";
}
//使用new关键字 必须要有构造器
//有参构造
public Person(String name) {
this.name = name;
}
//一旦定义了有参构造,无参构造就必须显式定义
}
内存分析
对象在堆里面
栈里面的是引用对象 在栈里面
封装
高内聚:类的内部操作细节自己完成 不需要外部干涉
低耦合:暴露少量的方法给外部使用
封装:数据的隐藏
禁止访问数据的实际表示
private 属性私有
提供一些方法:get()、set()
package kuangStudy.oop.Demo02;
public class Student {
//私有的属性
private String name;
private int id;
private char sex;
public String getName() {
return name;
}
public int getId() {
return id;
}
public char getSex() {
return sex;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
public void setSex(char sex) {
this.sex = sex;
}
}
实际上这个代码完全是靠alt+Insert快捷键 可以自动生成方法
封装的作用:
可以通过内部的封装让类的对象的属性更加安全
可以监管set的值 防止外部随意破坏类
- 提高程序安全性、保护数据
- 隐藏代码的实现细节
- 统一接口
- 可维护性增加了
继承
对一批类进行抽象
extends 父类
Ctrl+H 快捷键
展示继承树
java中 所有类直接或间接继承了object类
java中只有单继承 没有多继承
一个子类只能有一个父类
一个父类可以有多个子类
Super
子类的一个方法:
存在形参、子类属性、父类属性
可以分别通过:
name
this。name
super。name
调用
子类调用一个方法
method()
this。method()
会调用子类的方法
super。method()会调用父类的同名方法
父类的方法必须是public的 不能是private的
私有的东西无法被继承
new一个子类的时候
会先构造一个父类,然后构造子类
若要调用父类构造器 必须在子类的构造器中
父类没有无参构造 子类自然而然也不能进行无参构造
方法重写
重写与属性没有关系
都是方法的重写
静态和非静态的方法有区别:
-
方法带static修饰的时候:
父类可以 new子类
父类的引用指向了子类
会调用的是父类的方法
-
去掉static
就是重写
父类调用的是子类的重写的方法
同时方法得是public的
多态
方法才有多态性
属性没有
一个对象的实际类型是确定的
但是指向的引用类型就不确定了:父类的引用可以指向子类
子类重写的父类的方法后 会执行子类的方法
指向子类的父类引用不能调用子类特有的方法
能执行的方法取决于对象左边的类型
class1 a = new class2()
取决于class1
使用子类的方法 会强制转换父类引用到子类
多态注意事项:
instanceof
比较对象是否属于一个类 满足父子关系
可以用于判断是否有关系能否强制转换
匿名代码块
static的静态代码只会执行一次
匿名代码块每次生成对象都会执行一次 比构造器更早
静态导入包
import static java.lang.Math.random
可以直接使用random方法
抽象类
public abstract class
抽象方法: public abstract void method(){
}
抽象类的方法必须由子类实现(重写)
除非子类也是abstract类
不能new一个抽象类
抽象类中也可以有普通方法
但抽象方法只能在抽象类中
接口
只有规范化
自己没办法写方法
相当于专业约束的抽象
约束和实践分离
面向接口的编程
实现一个接口:
要有实现类:
class xxxImpl Implements 接口名
package kuangStudy.oop.Demo02;
public class my_interfaceImpl implements my_interface{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
}
利用接口实现多继承
implements 多个接口
接口中定义的属性 都是常量
public static final
内部类
类中定义类
成员内部类
类里面定义一个类
Outer outer = new Outer();
outer.new Inner();
//内部类可以访问外部类的私有变量
静态内部类
加上static
不能得到外部非静态的属性
在一个java文件
写的第二个class
不能是public class
方法里面写一个类
public void method()
{
class Inner{
}
}
匿名类
new Class().method();
new UserService()
{
public void hello(){
}
};
//重写接口的类 而且是匿名的
异常
Exception
运行时和非运行时异常
try、catch、finally
throw
throws
捕获多个异常
小的异常放前面的catch
知道有错 主动抛出异常
throw new exception();
在方法里面使用
假设这个方法中 无法处理异常 就向外抛出
throw
快捷键 自动生成异常捕获 Ctrl Alt T
标签:java,name,子类,day3,CLASS,new,父类,方法,public 来源: https://www.cnblogs.com/jaosnwww/p/14370353.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。